c++ - 标记所有不修改 const 的变量有什么缺点吗?

标签 c++ refactoring constants

经过多次谷歌搜索,我发现了很多关于将函数及其参数标记为 const 的内容,但没有关于将变量标记为 const 的指南。

这是一个非常简单的例子:

#include <string>
#include <iostream>

void example(const std::string& x) {
  size_t length = x.length();
  for (size_t i = 0; i < length; ++i) {
    std::cout << x.at(i) << std::endl;
  }
}

int main() {
  example("hello");
}

为什么不做

size_t length = x.length();

类似常量

const size_t length = x.length();

按照惯例?

我知道这样一个小而简单的示例实际上并没有显示出任何巨大的好处,但它似乎在更大的代码库中会有所帮助,在这种情况下你可能会意外地改变一个你不应该改变的变量。

尽管有这样的好处,但我并没有真正看到它被使用得那么多(在我见过的 C++ 代码库中),或者提到的几乎与制作函数及其参数 const 一样多。

除了必须输入 5 个额外的字符之外,这样做还有其他缺点吗?我在这个话题上没有找到太多的东西,如果有这么多的 const 是个问题,我不想自责。

最佳答案

标记不修改const的变量没有缺点。

不过也有一些好处:当您无意中修改了您不应该/无意修改的变量时,编译器会帮助您进行诊断,并且编译器可能(尽管由于语言的原因拥有 const_castmutable 这很少见)生成更好的代码。

所以,我建议;尽可能使用 const 。没有缺点,您的编译器可能会帮助您发现错误。没有理由不这样做(除了一些额外的输入)。

请注意,这也扩展到成员函数。尽可能使它们成为 const - 它可以让它们在更多上下文中使用并帮助用户推理代码(“调用此函数不会修改对象”是有值(value)的信息)。

关于c++ - 标记所有不修改 const 的变量有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925121/

相关文章:

编译器#警告: print enum value

c++ - 函数不改变传递的指针 C++

c++ - RAII 和推导的模板参数

c# - 模拟从另一个类继承的类

visual-studio-2008 - 如何(visual studio 2008/Resharper)重构/自动化混合模式

java - 在 Switch-Case-Smell 上重构或使用设计模式

c++ - 调用 const 函数而不是其非 const 版本

c++ - 函数返回负值

c++ - 通过 c plus 中的函数查找中位数

ruby-on-rails - ruby : How to load information of a yaml file