我刚刚读了答案
变量上的 const 与 constexpr https://stackoverflow.com/q/13346879/1593077
我正在看这个Google Tech 谈论 C++11/14 功能 https://www.youtube.com/watch?v=TK_SfTfxaxc,其中据说,对于函数来说,constexpr 在未来可能不再是必需的,因为编译器将不断发展以自行解决它。最后,我知道 Java 编译器和 JVM 会努力找出类(或可能的任何变量)在构造后是不可变的 - 无需您明确说明 - 并基于此事实进行各种邪恶的优化。
那么,问题来了: const 和 constexpr 最终的命运是一样的吗?也就是说,即使编译器不能保证执行运行时初始化等,但它最终不会在可能的情况下(基本上)这样做吗?当这种情况发生时,其中一个关键字不是多余的吗? (就像内联正在成为一样,也许)?
不,两者都不会取代对方,他们有不同的角色。 Bjarne Stroustrup 在他的著作中告诉我们C++ FAQ http://www.stroustrup.com/C++11FAQ.html#constexprconstexpr 不是 const 的替代品,并概述了每个功能的不同作用:
请注意 constexpr 不是通用的替代品
const(或反之亦然):
-
const's主要功能是表达这样的想法:对象不能通过接口修改(即使该对象很可能是
通过其他接口修改)。恰巧声明
一个东西const为
编译器。特别是,如果声明了一个对象const和它的
地址没有被占用,编译器通常能够评估它的值
在编译时初始化(尽管不能保证)并保留
该对象在其表中而不是将其发送到生成的
代码。
-
常量表达式主要功能是扩展编译时可计算的范围,使此类计算类型安全。对象
宣布常量表达式在编译时评估它们的初始值设定项;
它们基本上是保存在编译器表中的值,并且仅
如果需要的话,将其发送到生成的代码中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)