c++ - const vs non-const 变量,赋值后值不变

标签 c++ performance constants

在 C++ 中,如果变量的值一旦在整个程序中分配就永远不会改变 VS 如果将该变量设为 const ,在哪种情况下可执行代码更快? 情况1下编译器如何优化可执行代码?

最佳答案

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

关于您的第二个问题,当您将变量标记为 const 时,可能会发生以下情况:“编译器可以通过不提供存储来优化此 const到这个变量而不是将它添加到符号表中。因此,后续读取只需要间接进入符号表而不是从内存中获取值的指令“。在 What kind of optimization does const offer in C/C++? (if any) 中阅读更多内容.

我说的是可能,因为const并不意味着这是一个确定的常量表达式,这可以通过使用constexpr来完成,正如我在下面解释的那样。


一般来说,在使用 const 关键字时,您应该考虑更安全的代码,而不是更快的代码。因此,除非您这样做是为了更安全、更易读的代码,否则您很可能是过早优化的受害者。


奖励:

C++ 提供了 constexpr 关键字,它允许程序员将变量标记为标准所称的常量表达式。常量表达式不仅仅是常量。

阅读更多 Difference between `constexpr` and `const`When should you use constexpr capability in C++11?


PS:Constness 阻止移动,因此过度使用 const 可能会使您的代码执行得更慢。

关于c++ - const vs non-const 变量,赋值后值不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47549802/

相关文章:

java - System.currentTimeMillis() 作为 NoSQL 数据库行中的列名(按时间排序)

c++ - 在单独的函数中修改指向字符串文字的指针

c# - 在静态类中使用常量

C++ 改变具有特征的模板方法的行为

C++疑似堆栈溢出改变函数参数

c++ - 我收到错误 : cannot declare variable ‘a’ to be of abstract type ‘A’

performance - XNA - 如何更有效地绘制顶点?

c++ - 如何在这个 while 循环中找到迭代次数 - 操作计数

MySQL 多插入性能

scala - 在常量表达式中使用 scala 常量