【发布时间】:2016-12-19 21:22:05
【问题描述】:
经过多次谷歌搜索,我发现很多关于将函数及其参数标记为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 作为默认选择 " -- "C++ 编码标准",Herb Sutter 和 Andrei Alexandrescu。
-
“const 在 C++ 中起作用的原因是因为你可以抛弃它。如果你不能抛弃它,那么你的世界就会糟透了。” - 安德斯·海尔斯伯格
标签: c++ refactoring constants