C++中const可用于变量, 指针, 函数和类.
修饰变量
const修饰的变量的值不能再修改, 编译器也可以对其进行数据静态类型检查. 所以用const声明的变量可以保证类型安全, 用以取代C中的宏定义.
const定义的常量在C中是全局的, 在C++中则视声明位置而定.
修饰指针
使用指针时涉及到两个对象: 该指针本身和被它所指的对象.
const char *pc; // pc是到const char的指针, 即*pc的内容不可修改, 但pc可以指向其他字符串
char const *pc; // 同"const char *pc"
char *const pc; // pc到char的const指针, 即*pc的内容可以修改, 但pc不能指向其他字符串
函数中使用
修饰函数参数
const常用于修饰函数的指针参数和引用参数, 一是表示参数的内容不可修改, 二是可以提高效率.
修饰函数返回值
如果函数的返回值是指针或引用, 增加const修饰后, 则返回值不能被直接修改, 且返回值只能被赋值给const修饰的同类型变量.
类中使用
修饰成员变量
const的成员变量不能被修改, 且只能在初始化列表中赋值.
修饰成员函数
任何不会修改数据成员的成员函数都应用const修饰.
修饰形式:
int func(int) const;
对于使用了const修饰的成员函数:
- 不能修改成员变量
- 不能调用非const成员函数
- const类对象只能调用const成员函数
- const不能与static同时使用. const其实是用于修饰this指针, 即this指向的内容不可修改. 但static修饰的静态成员是类的而不是类对象的, 不含有this指针. 所以const和static不能共用.
另外, 构造函数和析构函数也是成员函数, 但不能使用const修饰, 因为两者都是在对成员变量修改.
修饰类对象
- 对象的任何成员不能被修改
- 只能调用const成员函数