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;  // 错误: 该指针不可切换指向的对象

相关解答#