600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【Effective C++ 条款03 笔记】尽可能使用const

【Effective C++ 条款03 笔记】尽可能使用const

时间:2023-06-15 13:38:25

相关推荐

【Effective C++ 条款03 笔记】尽可能使用const

条款03:尽可能使用const

一、顶层const和底层const

区分一下:

int a = 1;const int* pa = a;//底层const,a的值不能变int b = 2;int* const pb = b;//顶层const,pb的值不能变,即不能更改pb的指向

注意除了指针这种复合类型,其余基本类型的变量设置const全部为顶层const

二、const作用于迭代器

声明一个const迭代器与顶层指针类似:

const vector<int>::iterator it = vec.begin(); //类似一个顶层指针int* const,也就是it作为一个迭代器,不能更改指向,必须始终指向vec.begin()*it = 111; //可以++it; //不行

要想模拟底层const,可以直接使用const_iterator

vector<int>::const_iterator cIt = vec.begin();//模拟底层const*cIt = 111; //不行++cIt; //可以

三、const作用于函数返回值

比如一个运算符函数operator*,如果不将参数返回值声明为const的话,会出现下面的情况

if(a * b == c)//这一句如果手误写成下面的形式,就不会被识别出来if(a * b = c)

但是将operator*的返回值声明为const,即可避免这一问题

const T oprator*(const T& left, const T& right);

四、const作用于成员函数

当一个成员函数为常函数,注意不是返回值为const,而是函数为const

char func() const;//常函数,可以被常对象调用const char& func();//返回值为const

要想在const成员函数内改变某些成员变量,只需要将需要修改的成员变量声明为mutable

五、在non-const函数中可以调用const函数版本

这一处主要用来减少代码重复,因为两个函数只是常量性不同的话,即使函数体完全相同,也是重载的函数。可以用const函数实现出对应代码的non-const版本,但是反过来不行。

这是因为const函数承诺不改变对象的逻辑状态,non-const函数没有这样的承诺。如果在const函数内调用non-const函数,就违反了这一承诺。non-const函数本来就可以对对象做任何动作,在其中调用一个const函数并没有风险。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。