constexpr
和有什么区别consteval
吗?
consteval int x1 = 2;
constexpr int x2 = 5;
使用 constexpr 比使用 consteval 更好吗?
该标准实际上说:
consteval 说明符仅应用于函数或函数模板的声明。
所以你的第一个例子不应该编译。
但是,您可以放置consteval
或constexpr
放置函数:
constexpr int foo (int x) { return x; }
consteval int bar (int x) { return x; }
constexpr
当应用于函数时,很大程度上只是建议性的(参见 Davis Herring 的评论)——它对编译器说,如果可以的话,在编译时评估这个函数调用。
consteval
另一方面,它是强制性的——它告诉编译器,如果你不能在编译时评估这个函数调用,就会产生一个错误。