在什么情况下需要将变量设置为常量?
如果你希望一个变量始终保持相同的值,难道你不可以只是不改变它吗?
如果你是一个完美的程序员,那么可以不改变变量。但是六个月后,当你很久没有看过这个文件并需要进行微小更改时,你可能不记得你的变量不应该改变。如果其他代码基于这个假设编写,那就可能会导致灾难。
如果你在项目中与其他人合作,这种情况可能会更加复杂。注释说“/* plz don't change this variable kthx */”是一回事,但是让编译器强制执行这个约束条件则更难被忽视。
常量是不能修改的,这使得编译器可以对它们进行许多聪明的操作。如果我写下以下代码:
const int foo = 5;
int some_function() {
return foo;
}
some_function
返回5
,因为foo
永远不会改变。如果foo
不是const
,some_function
总是需要读取变量的当前值。此外,如果我有:const char foo[] = "Ashton Bennett is a cool C++ programmer";
...
// Somewhere else in the file
const char bar[] = "Ashton Bennett is a cool C++ programmer";
没有必要让这两个字符串都存在。如果编译器可以证明你从未引用它们中的任何一个,它可以将常量折叠成一个,节省空间。
constexpr
。这将允许进行更多的优化。 - val is still with Monicaconst
,您可以使编译器捕获任何试图更改它的尝试。例如,想象一下,如果通过引用将某个变量传递给一个会更改它的函数。如果您将该变量标记为 const
,编译器将捕获到这一点。如果不这样做,您将有一个错误,必须找到并修复它——希望在它引起严重问题之前能够修复。const
,可以在编译时检测到可能会无意中添加到复杂代码中的大量错误,而不会导致程序执行不正确。编写没有错误的代码很难,任何可以显着帮助我们完成这项工作的工具都受到欢迎。是的,但你并没有考虑到很少有人会独自完成一个项目,而且你编写的代码可能在你离开后还会存在,所以别人可能无法询问关于变量及其使用的问题。通过将它标记为常量,你告诉所有人:“这个值在代码中不应该被改变”。
虽然我目前无法想出一个可能的/好的实践案例,但需要考虑成员函数(当然还有自由函数)可以重载const
:
struct Foo {
void Bar() {
// One thing
}
void Bar() const {
// Another thing
}
};
// Later somewhere;
// which function gets called depends on
// whether the_foo is const or not
the_foo.Bar();
因此,将变量设为const
可以在重载解析期间更改调用的函数。
private
的相关问题:https://dev59.com/hW855IYBdhLWcg3wJg1y - L. F.