Item 3:尽可能使用const【effective C++读书笔记】

版权声明:本文为博主原创文章,转载请注明出处并附带本文链接。 https://blog.csdn.net/IOT_Flower/article/details/78546923

const出现在星号左边,表示被指物是常量;出现在星号右边,表示指针自身是常量。

const显式地表明哪些部分是不应修改的,增强了代码的可读性,同时也让编译器在检测到非法的修改操作时及时报错。

const某些情况下可以避免将“==”写成“=”的错误

另外,const成员函数可以操作const对象(const对象只能调用const成员函数而不能调用非const成员函数,非const对象可以调用const成员函数和非const成员函数)

 

两个成员函数如果只是常量性不同,可以被重载,如下:

①void func()const{}以及 void func(){}是不一样的,前者不允许修改成员数据,对操作符重载也是同理

 

如果是引用传递的函数参数常量性不同,那么可以被重载,如下:

②void func(constint &a){} 以及 void func(int &a){}也是不一样的

 

而如果是值传递的函数参数常量性不同,则不可被重载(个人理解是const用于保护这个参数不被修改,但由于值传递的方式函数并不会修改传入参数,所以没有必要加const)

③void func(constint a){} 以及 void func(int a){}

  //在一个类中尝试定义这两个成员函数,报错信息为重复定义

    

mutable可以解除const的限制,使得带有mutable的成员变量即使在const成员函数中也可以被修改,如下:

class A{

public:

     int func() const; //const成员函数

private:

     mutable int a;

     int b;

};

int func() const

{

     a = 5;    //可以修改

     b = 5;    //不可以修改

}

 

当const和非const成员函数有着实质等价的实现时,可以令非const成员函数调用const成员函数,避免代码重复。

猜你喜欢

转载自blog.csdn.net/IOT_Flower/article/details/78546923