C++23即将引入if consteval
.这将在哪里使用,它与 constexpr if
有何不同? ?
最佳答案
if consteval
检测是否有 constexpr
函数在常量表达式上下文中调用。 proposal促使它针对一个人打算调用 consteval
的情况进行介绍。来自 constexpr
的函数功能。为了理解这意味着什么,我们考虑以下示例。
假设我们有一个 consteval
功能 f
:
consteval int f( int i )
{ ... }
f
只能在常量表达式中调用。另一方面,constexpr
功能 g
可以在常量表达式中或在运行时调用。这取决于 g
的参数是否在编译时是否已知。现在,调用
f
来自 g
如果 g
在编译时调用可以如下完成。constexpr int g( int i )
{
if consteval { //1
return f( i );
}
else {
return fallback();
}
}
这里if consteval
在线//1
如果 g
则触发在常量表达式中调用。注意
//1
中不能有条件.还有 if consteval
之后的大括号是强制性的。C++20 介绍
is_constant_evaluated
用于检测函数调用是否发生在常量评估的上下文中。使用 is_constant_evaluated
在我们的示例中会导致一个微妙的错误。 IE。交换//1
通过 if constexpr (std::is_constant_evaluated()) {
结果 is_constant_evaluated
总是返回 true
.
关于c++ - 如果需要 consteval 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68213012/