您可能知道,C++11 引入了constexpr
关键字。
C++11 引入了关键字 constexpr,它允许用户保证函数或对象构造函数是编译时常量。[...] 这使编译器能够理解并验证 [函数名称] 是编译时常量。
我的问题是为什么对可以声明的函数的形式有如此严格的限制。我理解希望保证函数是纯的,但考虑一下:
在函数上使用 constexpr 对该函数的功能施加了一些限制。首先,函数必须具有非 void 返回类型。其次,函数体不能声明变量或定义新类型。第三,主体可能只包含声明、空语句和单个返回语句。必须存在参数值,以便在参数替换之后,return 语句中的表达式产生一个常量表达式。
这意味着这个纯函数是非法的:
constexpr int maybeInCppC1Y(int a, int b)
{
if (a>0)
return a+b;
else
return a-b;
//can be written as return (a>0) ? (a+b):(a-b); but that isnt the point
}
你也不能定义局部变量...... :(所以我想知道这是一个设计决定,还是编译器在证明函数 a 是纯函数时会很糟糕?