第2.8章: const

English

什么是 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 的目的是正确性与清晰度——它防止意外修改, 并传达意图。它不是性能特性。

更多讨论见 The Art of Machinery:C const 与性能无关 。

要点