17 August 2023

C++ 核心指南目录

“By default, make objects immutable”

理由

更容易对不可变对象进行推理分析。只有在需要修改对象值的地方把对象设置为可变数据。使用不可变对象,可以避免偶然的或者很难注意到的值发生改变。

例子

for (const int i : c) cout << i << '\n';    // just reading: const

for (int i : c) cout << i << '\n';          // BAD: just reading, may change

例外

通过值传递的函数参数不太会被改变。所以也很少设置为 const 。为了避免混淆,为了减少误报,请不要在函数参数上应用此规则指南。

void f(const char* const p); // pedantic
void g(const int i) { ... }  // pedantic

注意,函数参数其实是函数的局部变量,所以修改这些参数只是修改局部数据。

强化

标记那些非 const 的,但是值并不改变的变量。(为了避免误报,请排除函数参数)