const vs非const变量,赋值后没有值变化

aru*_*pal 3 c++ performance const

在C++中,如果变量的值在整个程序VS中分配后永远不会改变如果将该变量设为const,那么可执行代码更快?编译器如何优化案例1中的可执行代码?

gsa*_*ras 5

聪明的编译器可以理解变量的值永远不会改变,从而优化相关代码,即使const程序员没有显式关键字也是如此.

至于你的第二个问题,当你把变量标记为const,那么可能会发生以下情况:"编译器可以通过不向这个变量提供存储来优化掉这个const而不是将它添加到符号表中.所以,后续的读取只需要间接到符号表而不是从内存中获取值的指令".阅读更多内容const在C/C++中提供什么样的优化?(如果有的话).

我说可能,因为const并不意味着这是一个肯定的常量表达,这可以通过使用constexpr而不是,正如我解释的那样.


通常,在使用const关键字时,您应该考虑更安全的代码,而不是更快的代码.因此,除非您为更安全和更易读的代码执行此操作,否则您可能会成为过早优化的受害者.


奖金:

C++提供了constexpr关键字,允许程序员将变量标记为标准调用常量表达式.常量表达式不仅仅是常量.

阅读更多有关`constexpr`和`const`之间的区别以及何时应该在C++ 11中使用constexpr功能?


PS:Constness阻止移动,所以使用const太过宽松可能会使你的代码执行得更慢.

  • 我不同意过早的优化评论.无论性能如何提高,OP都应该使用`const`和`constexpr`.投入的时间使代码更安全,更易读. (3认同)
  • 提到'constexpr`将是这里的锦上添花. (2认同)