const
#
const
是一种约定, 它始终作用于左边的对象, 要求它 所限定的对象 不应被修改.
基于这样的约束, 必须在构造一个对象时初始化它, 之后就不能修改了.
1int const a; // 错误: 未初始化 const 限定的对象
2
3int const b = 0; // 必须在这里初始化它
4b = 3; // 错误: 试图修改 const 限定的对象
警告
const
只是一种约定, 有众多方法可以修改 const 对象, 但绝不能因为能做到就去做!
读者看到 const 对象时, 必然假设该对象不会被修改;如果人为打破这种约定, 只会让代码难以阅读, 增加维护成本.
交叉内容#
const
与初始化、赋值#
const 限定的对象不能被修改, 因而只能进行初始化, 不能赋值.
1int const a; // 错误: 未初始化 const 限定的对象
2
3int const b{0}; // 必须在这里初始化它
4b = 3; // 错误: 试图修改 const 限定的对象
const
与引用#
由于引用不是对象, const
不能作用于它.
1int value;
2int const& ref1 = value; // const 向左作用于 int; 引用的 int 对象不可改变
3int& const ref2; // 错误: 引用本身不是对象, 不能用 const 限定它
const
与指针#
const
不仅可以作用于指针对象本身, 也可作用于指针指向的对象.
1int value = 0;
2int* const pointer = &value; // const 向左作用于 *; 指针本身不可改变, 即不可切换指向的对象
3
4/* 修改指向的 int 对象 */
5*pointer = 1; // 正确
6
7/* 切换指向的对象 */
8int another_value = 0;
9pointer = &another_value; // 错误: 该指针不可切换指向的对象
1int value = 0;
2int const* pointer = &value; // const 向左作用于 int; 指针指向的 int 对象不可改变
3
4/* 修改指向的 int 对象 */
5*pointer = 1; // 错误: 该指针指向的 int 对象不可改变
6
7/* 切换指向的对象 */
8int another_value = 0;
9pointer = &another_value; // 正确