我只是读了答案
并且正在观看有关C ++ 11/14功能的Google Tech讨论,据说在将来,关于函数,constexpr可能不再是必需的,因为编译器将不断发展以自行解决它。最终,我知道Java编译器和JVM会努力工作,以找出构造后的类(或任何变量)是不可变的-无需您明确声明-并基于此事实进行各种邪恶的优化。
所以,这是一个问题:const和constexpr的命运最终将是同一回事吗?也就是说,即使不能保证编译器也可以进行运行时初始化等,但最终是否会(基本上)不这样做?发生这种情况时,其中一个关键字不会多余吗?(就像内联变得可能一样)?
不,两者都不会取代对方,他们的角色不同。Bjarne Stroustrup在C ++常见问题解答中告诉我们constexpr不能替代const,并概述了每个功能的不同作用:
请注意,constexpr不是const的通用替代品(反之亦然):
- const的主要功能是表达一个想法,即不能通过接口修改对象(即使该对象很可能通过其他接口修改)。碰巧的是,声明对象const为编译器提供了绝佳的优化机会。特别是,如果将一个对象声明为const并且未使用其地址,则编译器通常能够在编译时评估其初始化程序(尽管不能保证)并将该对象保留在其表中,而不是将其释放到生成的代码中。
- constexpr的主要功能是扩展在编译时可以计算的范围,从而使这种计算类型安全。声明为constexpr的对象的初始值设定项在编译时进行评估;它们基本上是保存在编译器表中的值,并且仅在需要时才发出到生成的代码中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句