标准实际上是这样规定的: consteval限定符仅适用于函数或函数模板的声明。 因此,你的第一个示例不应该编译。 然而,你可以在函数上加上consteval或constexpr: constexpr int foo (int x) { return x; } consteval int bar (int x) { return x; } 当应用于函数时,constexpr基本上是建议性的(请参见Davis Herring的评论)-它告诉编译器,在编译时尽可能评估此函数调用。另一方面,consteval是强制性的-它告诉编译器,在编译时无法评估此函数调用时生成错误。 在线演示