美文网首页
条款 03:尽可能使用const

条款 03:尽可能使用const

作者: robotai | 来源:发表于2020-09-26 22:14 被阅读0次

    const 可以用来修饰指针所指物、指针、引用、函数入参、返回值、STL迭代器等。

    一、指针

    char st[] = "hello";

    char *p = st;                         //非常量指针,非常量数据

    const char *p=st;                 //非常量指针,常量数据

    char * const p = st;              //常量指针,非常量数据

    const char * const p = st;    //常量指针,常量数据,也可写为  char const  * const p = st; 

    二、STL迭代器

    迭代器指针是常量

    迭代器指向常量

    std::vector<int> vec;

    ....

    std::vector<int>::iterator iter = vec.begin();    

    const std::vector<int>::iterator iter = vec.begin();      //iter 这个指针是常量,相当于  T * const p

    *iter = 10;      //正确

    iter++;       //错误

    std::vector::const_iterator iter = vec.begin();      //相当于  const T *p

    *iter =10;    //错误

    iter++;    //正确

    三、在函数声明中的使用

    函数返回值使用常量可以避免右值赋值的情况;

    类的operator * 函数

    class A operator *(const A & A1, const A & A2 );

    A  a1,a2,a3;

    ...

    (a1*a2)=a3;  //a1 a2之间调用了operator*,结果和a3之间调用了operator= ,如果返回类型是内置类型,改动返回值不合法,无法通过编译

    const class A operator *(const A & A1, const A & A2 );  //可以避免这种调用

    四、const 成员函数

    4.1 理解函数为什么要加const修饰

    4.2 封装用于非const对象和const对象的接口,接口的调用

    4.3 在const 函数中实现类测成员修改

    4.4 用const 函数封装非const 函数,static_cast 将非const 转为const , const_cast 将const 对象的const 移除

    相关文章

      网友评论

          本文标题:条款 03:尽可能使用const

          本文链接:https://www.haomeiwen.com/subject/emkhuktx.html