1. 修饰变量
-
const修饰变量,表明该变量在初始化后不可被修改。因此声明为const的变量必须在定义时就初始化。
cosnt int MAX_VALUE = 100;
2. 常对象
常对象的数据成员值在对象的整个生存期间都不能被改变。
const Myclass obj;
- 常对象的数据成员无法被修改,但是可以调用常成员函数。
3. const修饰的类成员
3.1 常成员函数
const修饰的函数为常成员函数。
void print();
void print() const;
- 常对象只能调用它的常成员函数,不能调用其他成员函数(常成员函数是常对象唯一的对外接口)。
- const关键字可以用于对重载函数的区分,如上例。
- 常成员函数默认不可以修改普通数据成员的值,除非这些数据成员被声明为
mutable
。
3.2 常数据成员
- 任何函数都不能给常数据成员赋值。
- 构造函数对常数据成员进行初始化,只能通过初始化列表方式。
4. 常引用
MyClass(const MyClass& other); //默认复制构造函数
- 常引用所引用的对象不能被更新。如果用常引用做形参,便不会发生意外对实参的修改。
- 非const的引用不可以绑定常对象;常引用无论绑定普通对象还是常对象,通过该引用访问该对象时,都只能把该对象当做常对象。
- 对于无须改变其值的参数,最好是使用传值方式或传递常引用。对于大对象来说,传值消耗大,宜选常引用。如复制构造函数的参数一般使用常引用传递。