const和constexpr最终会是同一个东西吗?

时间:2015-01-08 22:16:02

标签: c++ c++11 const constexpr compile-time-constant

我刚看了

的答案

const vs constexpr on variables

我正在观察这个Google Tech Talk about C++11/14 features,据说,在功能方面,未来可能没有必要使用constexpr,因为编译器会逐步自行解决。最后,我知道Java编译器和JVM很难弄清楚类(或任何变量)在构造之后是不可变的 - 没有你明确地这么说 - 并且基于这个事实进行各种恶意优化。

所以,这里有一个问题:const和constexpr的命运最终会是同一个东西吗?也就是说,即使编译器不能保证进行运行时初始化等,它最终也不会这样做(基本上)吗?当发生这种情况时,其中一个关键字是多余的? (就像内联正在变成,也许)?

1 个答案:

答案 0 :(得分:6)

不,没有人会替换另一个,他们有不同的角色。 Bjarne Stroustrup在他的C++ FAQ中告诉我们,constexpr不是const的替代品,并概述了每个特征的不同角色:

  

请注意,constexpr不是通用的替代品   const(或反之亦然):

     
      
  • const 主要功能是表达一个对象未​​通过接口修改的想法(即使该对象很可能是   通过其他接口修改)。声明就是这样   对象 const 为其提供了极好的优化机会   编译器。特别是,如果一个对象被声明为 const 及其   地址未被采用,编译器通常能够对其进行评估   编译时的初始化程序(尽管不能保证)并保留   该对象在其表中而不是将其发送到生成的表中   代码。
  •   
  • constexpr 主要功能是扩展编译时可以计算的范围,使这种计算类型安全。对象   声明 constexpr 在编译时评估其初始化程序;   它们基本上是保存在编译器表中的值   如果需要,将其发送到生成的代码中。
  •