ein*_*ica 5 c++ const compile-time-constant constexpr c++11
我刚刚读了答案
我正在观看关于C++ 11/14 功能的谷歌技术讲座,其中有人说,在功能方面,未来可能不需要constexpr,因为编译器会逐步发现它们自己解决问题.最后,我知道Java编译器和JVM很难弄清楚类(或任何变量)在构造之后是不可变的 - 没有你明确地这么说 - 并且基于这个事实进行各种恶意优化.
所以,这里有一个问题:const和constexpr的命运最终会是同一个东西吗?也就是说,即使编译器不能保证进行运行时初始化等,它最终也不会这样做(基本上)吗?当发生这种情况时,其中一个关键字不会是多余的吗?(就像内联正在变成,也许)?
不,没有人会取代另一个,他们有不同的角色.Bjarne Stroustrup在他的C++ FAQ中告诉我们,constexpr不是const的替代品,并概述了每个特性的不同角色:
请注意,constexpr不是const的通用替代品(反之亦然):
- const的主要功能是表达一个对象不是通过接口修改的想法(即使该对象很可能通过其他接口修改).事实上,声明一个对象const为编译器提供了极好的优化机会.特别是,如果一个对象被声明为const并且它的地址没有被采用,编译器通常能够在编译时评估它的初始化程序(虽然这不能保证)并将该对象保存在其表中而不是将其发送到生成的代码中.
- constexpr的主要功能是扩展编译时可以计算的范围,使这种计算类型安全.声明constexpr的对象在编译时评估其初始化程序; 它们基本上是保存在编译器表中的值,只在需要时才会发送到生成的代码中.
归档时间: |
|
查看次数: |
475 次 |
最近记录: |