Effective C++ 02 const限定符 木灵的炼金工作室

这是Effective C++的学习记录。

条款03:尽量使用Const限定符

const限定符可以有效阻止对于本不应变化的变量的修改,这对于代码的稳定性的提升极高。
const可以限定类型名和函数:
const的常见用法:

  1. 修饰类型名const int conInt;,此用法的const的位置可以在类型名的任意位置,比如int const也可以通过编译。
    这种用法告诉编译器:这个变量的类型是只读的,只能通过初始化赋予它初值。
    此处注意,单个类型名中可以出现多个const限定符,此时我们需要考虑一下const的所在位置:
    比如语句const int * const ptCI;声明了一个“指向const int类型的const指针”,第一个const表示指针指向类型是整形常量,第二个const表示指针本身类型是const,也就是指针不可改变。
  2. 修饰函数本身:const多修饰成员函数,表明该函数不可修改任何成员。
  3. 修饰函数返回值:表明函数返回一个右值。这种用法的作用在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,那么:

  1. 即使通过const函数,该成员也可以修改
  2. 即使实例是const实例,该成员也可以修改


Copyright AmachiInori 2017-2021. All Right Reserved.
Powered By Jekyll.
amachi.com.cn