前言
c++中使用到const的地方有很多, 而且const 本身也针对不同的类型可能有不同的含义, 比如对指针就有顶层和底层. 本节就是探讨关于C++中const的在不同的地方不同表现或含义.
const
关于const :
-
const修饰的对象一旦创建一般就不能改变, 所以对于const对象必须进行初始化.int i = 0; const int j; // error. 必须进行初始化 const int j = 0; -
初始化时并不关心初始化对象的是
const还是非constint i = 0; const int j = i; // i 是非const也可以 -
const不能改变const int i = 0; i = 1; // error const的对象一般不能进行修改 -
引用对象的类型必须与其所引用对象的类型一致
int i = 0; int &j = i; double &size = j; // error. size与j的类型不一致- 因为以上引用的规则, 所以
const类型的引用只能被const的对象引用
int i = 0; const int &size = i; int &j = size; // error. size的类型为const int, j的类型为 int. 两者并不匹配-
引用类型对应的例外
int size = 0; const double &i = size; // size与i的类型虽然不一致, 但是因为const的原因使得等式成立原因 : 虽然i与size两者的类型并不一致, 但是初始化i时, 编译器会为size生成一个临时量(
double j = size;), 然后i最终绑定在这个临时量上(const double &i = j ). i 之所以能绑定在一个临时量上, 还是因为
- 因为以上引用的规则, 所以
