使变量成为常数的重要性是什么?

Ash*_*ett 9 c++ variables constants

在什么情况下需要使变量恒定?

如果您希望变量始终保持相同的值,就可以不更改它吗?

Sil*_*olo 11

保证金

如果您是一个完美的程序员,那么可以肯定的是,不要更改变量。但是六个月之后,当您很长一段时间没有查看此文件并且需要进行较小的更改时,您可能不记得您的变量不应该更改。而且,如果其他代码是以此假设编写的,那将是灾难的根源。

如果您正在一个项目的人一起工作那么这会增加十倍。发表评论/* plz don't change this variable kthx */是一回事,但是让编译器强制执行该约束则很难错过。

最佳化

常量无法修改。这使编译器可以对它们进行很多巧妙的处理。如果我写

const int foo = 5;

int some_function() {
    return foo;
}
Run Code Online (Sandbox Code Playgroud)

编译器只能具有some_functionreturn 5,因为它foo永远不会改变。如果foo不是constsome_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";
Run Code Online (Sandbox Code Playgroud)

没有理由同时存在这两个字符串。如果编译器可以证明您从未引用过它们中的任何一个,则它可以将常量折叠为一个,从而节省空间。

  • 您展示了编译时常量的示例,在现代C ++中应该是“ constexpr”。这将允许更多优化。 (2认同)

Dav*_*rtz 8

最重要的原因是避免错误。通过标记const,您可以允许编译器捕获任何尝试对其进行更改的尝试。例如,假设某个变量是否通过引用传递给更改它的函数。如果标记了该变量const,则编译器将捕获该变量。如果不这样做,您将遇到一个必须查找和修复的错误-希望在它引起一些严重问题之前。

通过标记变量,类成员函数,参数和引用const,可以在编译时检测到很容易在无意中将大量错误添加到复杂代码中的错误,然后才有可能导致程序错误执行。产生没有错误的代码非常困难,欢迎使用任何可以大大帮助我们完成此任务的工具。


归档时间:

查看次数:

327 次

最近记录:

6 年,6 月 前