constexpr 在 C 11 中可能吗?
问题:
C 11 能否确定是否表达式是编译时常量表达式(constexpr)?
答案:
是的,可以使用以下技术根据此确定生成编译时布尔值:
template<typename T> constexpr typename remove_reference<T>::type makeprval(T &&& t) { return t; } #define isprvalconstexpr(e) noexcept(makeprval(e))
该宏使用 noexcept 运算符检查表达式 e 是否是纯右值常量表达式。如果 noexcept(makeprval(e)) 计算结果为 true,则表达式 e 是纯右值常量表达式。
说明:
纯右值常量表达式有一定的限制:
未声明 makeprval 函数as noexcept,因此如果 e 是纯右值常量表达式,则调用 makeprval(e) 将是常量表达式。因此,noexcept 运算符将返回 true。
限制:
isprvalconstexpr 宏有一些限制:
以上是C 11 能否确定表达式是否为编译时常量?的详细内容。更多信息请关注PHP中文网其他相关文章!