我知道需求的差异,我最感兴趣的是它带来的代码质量的好处。
我能想到的几件事:
- 读者可以只阅读函数签名并知道该函数是在编译时评估的
- 编译器可能会发出更少的代码,因为
consteval
在运行时从不使用 fns(这是推测性的,我没有这方面的真实数据) - 不需要有变量来强制ctfe,最后的例子
注意:如果代码质量太模糊,我知道有些人可能想结束这个问题,对我来说,代码质量并不是那么模糊的术语,但是......
constexpr
失败延迟到运行时的示例:
constexpr int div_cx(int a, int b)
{
assert(b!=0);
return a/b;
}
int main()
{
static constexpr int result = div_cx(5,0); // compile time error, div by 0
std::cout << result;
std::cout << div_cx(5,0) ; // runtime error :(
}