Tem*_*Rex 32 c++ backwards-compatibility constexpr c++11 c++14
使用新的轻松的C++ 14 constexpr规则,编译时编程变得更具表现力.我想知道标准图书馆是否也会升级以便利用.特别是std::initializer_list,std::pair,std::tuple,std::complex,std::bitset和std::array看起来像总理候选人须注明constexpr批发.
问题:
constexpr?constexpr?<cmath>和<algorithm>标记的功能constexpr?Rap*_*ptz 26
标准库的哪些部分现在将标记为constexpr?
从我为C++ 14,N3690查看的草案,constexpr到目前为止将改变以下(与C++ 11标准相比)†:
std::error_category的默认构造函数std::forwardstd::movestd::move_if_noexceptstd::pair的运营商比较std::get为std::pair和std::tuple.std::make_tuplestd::tuple的运营商比较std::optional的运营商比较std::optional的构造者(除了移动)operator[]和size对std::bitset等容器.std::complex的运营商比较† 由于我手动执行此操作,您可能会遇到一些错误:(
对于另一个可能更正确的constexpr添加列表,您可以检查:N3469,N3470和N3471
哪些其他部分可以标记为constexpr?
大多数可能的东西constexpr(std::numeric_limits评估std::tuple和std::pair构造函数等)已经标记为constexprC++ 11标准.有一个错误,其中std::ratio的时间点和其他组件没有标记为,constexpr但它已在N3469中修复.
可以从constexpr增加中受益的东西std::initializer_list,这次没有得到任何东西(我不确定是否有任何提议允许它).
是否有向后兼容的原因不这样做?
由于这是一个扩展,大多数东西都不会被破坏,因为旧的代码仍然会按原样编译,现在什么都没有形成.但是,添加constexpr到没有它的旧东西可能会导致一些令人惊讶的结果,如果你没想到它,例如这里提供的例子(谢谢TemplateRex)
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |