您可以自由地共享和演绎本文稿, 只需遵守开源协议[CC By 4.0]
如果这篇文章帮助到你, 可以请我喝一杯咖啡~
这是Effective C++的学习记录。
条款03:尽量使用Const限定符
const限定符可以有效阻止对于本不应变化的变量的修改,这对于代码的稳定性的提升极高。
const可以限定类型名和函数:
const的常见用法:
- 修饰类型名
const int conInt;
,此用法的const
的位置可以在类型名的任意位置,比如int const
也可以通过编译。
这种用法告诉编译器:这个变量的类型是只读的,只能通过初始化赋予它初值。
此处注意,单个类型名中可以出现多个const限定符,此时我们需要考虑一下const的所在位置:
比如语句const int * const ptCI;
声明了一个“指向const int
类型的const
指针”,第一个const表示指针指向类型是整形常量,第二个const表示指针本身类型是const,也就是指针不可改变。 - 修饰函数本身:const多修饰成员函数,表明该函数不可修改任何成员。
修饰函数返回值:表明函数返回一个右值。这种用法的作用在EFC++中以一个很直观的例子被解释:
className operator*(const className& a, const className& b){...} ... className a, b, c; (a * b) = c //此语句编译通过
const className operator*(const className& a, const className& b){...} ... className a, b, c; (a * b) = c //此语句编译不通过
C++中存在着与const限定符相反且优先级更高的限定符:mutable
,它的意思是:无论如何都可以修改:
比如,在一个类中的某个成员被声明为mutable
,那么:
- 即使通过const函数,该成员也可以修改
- 即使实例是const实例,该成员也可以修改