5

constexpr和有什么区别consteval吗?

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

使用 constexpr 比使用 consteval 更好吗?

4

1 回答 1

15

标准实际上说:

consteval 说明符仅应用于函数或函数模板的声明。

所以你的第一个例子不应该编译


但是,您可以放置consteval​​或constexpr放置函数:

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

constexpr当应用于函数时,很大程度上只是建议性的(参见 Davis Herring 的评论)——它对编译器说,如果可以的话,在编译时评估这个函数调用。

consteval另一方面,它是强制性的——它告诉编译器,如果你不能在编译时评估这个函数调用,就会产生一个错误。

现场演示

于 2020-10-16T20:00:56.850 回答