consteval和constexpr在变量上的区别

19

constexprconsteval 有什么区别吗?

 consteval int x1 = 2;
 constexpr int x2 = 5;

使用constexpr比consteval更好吗?


1
我已经撤销了该问题,因为它已经得到了很好的回答。如果您有其他问题,请提出新的问题,否则可能会浪费其他人编写答案的时间,这并不理想。 - cigien
1个回答

35

标准实际上是这样规定的:

consteval限定符仅适用于函数或函数模板的声明。

因此,你的第一个示例不应该编译


然而,你可以在函数上加上constevalconstexpr

constexpr int foo (int x) { return x; }
consteval int bar (int x) { return x; }

当应用于函数时,constexpr基本上是建议性的(请参见Davis Herring的评论)-它告诉编译器,在编译时尽可能评估此函数调用。
另一方面,consteval是强制性的-它告诉编译器,在编译时无法评估此函数调用时生成错误。 在线演示

5
在函数上使用constexpr并不是完全建议性的,因为能够将其返回值用作模板参数“需要”编译时求值(即除解释器外)。 - Davis Herring
@DavisHerring 是的,谢谢,我对我的答案进行了(非常简短的)微调。 - Paul Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接