美文网首页
条款 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