第2.8章: const
什么是 const?
const 关键字把变量标记为不可变:一旦初始化,它的值就不能改变。
它提升正确性与清晰度,但不影响性能。
const 的规则
完整规则是:const 作用于它左边的东西。
如果左边什么都没有,则它作用于右边的东西。
因此,我们可以把规则简化为:
const 作用于左边。就这样。
所以,推荐的写法是 T const,而不是 const T。
类型在前,限定符在后。
有些人认为 clang-tidy 这类工具甚至应当提供一个开关,
当用户写 const T 而不是 T const 时给出警告。
示例
#include <cstddef>
#include <cstdint>
::std::int32_t const a{42}; // constant 32-bit integer
::std::size_t const n{100}; // constant size_t
double const pi{3.14}; // constant double
char const nl{'\n'}; // constant char
// Do NOT write: const ::std::int32_t wrong{42};
// Preferred: ::std::int32_t const a{42};
const 与性能
一个常见误解是使用 const 会让代码更快。
这是错误的。现代编译器早已基于使用情况和生命周期进行优化,
与变量是否被声明为 const 无关。
const 的目的是正确性与清晰度——它防止意外修改,
并传达意图。它不是性能特性。
要点
const作用于左边。就这样。- 始终把常量声明为
T const,而不是const T。 - 常量必须在声明时初始化。
const提升正确性与清晰度,而不是性能。- 有些开发者希望
clang-tidy这类工具强制执行这种风格。