我刚看了
的答案const vs constexpr on variables
我正在观察这个Google Tech Talk about C++11/14 features,据说,在功能方面,未来可能没有必要使用constexpr,因为编译器会逐步自行解决。最后,我知道Java编译器和JVM很难弄清楚类(或任何变量)在构造之后是不可变的 - 没有你明确地这么说 - 并且基于这个事实进行各种恶意优化。
所以,这里有一个问题:const和constexpr的命运最终会是同一个东西吗?也就是说,即使编译器不能保证进行运行时初始化等,它最终也不会这样做(基本上)吗?当发生这种情况时,其中一个关键字是多余的? (就像内联正在变成,也许)?
答案 0 :(得分:6)
不,没有人会替换另一个,他们有不同的角色。 Bjarne Stroustrup在他的C++ FAQ中告诉我们,constexpr不是const的替代品,并概述了每个特征的不同角色:
请注意,constexpr不是通用的替代品 const(或反之亦然):
- const 主要功能是表达一个对象未通过接口修改的想法(即使该对象很可能是 通过其他接口修改)。声明就是这样 对象 const 为其提供了极好的优化机会 编译器。特别是,如果一个对象被声明为 const 及其 地址未被采用,编译器通常能够对其进行评估 编译时的初始化程序(尽管不能保证)并保留 该对象在其表中而不是将其发送到生成的表中 代码。
- constexpr 主要功能是扩展编译时可以计算的范围,使这种计算类型安全。对象 声明 constexpr 在编译时评估其初始化程序; 它们基本上是保存在编译器表中的值 如果需要,将其发送到生成的代码中。