我知道,这些问题很早就被问到了(例如constexpr 函数中的非 constexpr 调用),但让我们看下一个代码:
\nconsteval int factorial(int n)\n{\n return n <= 1 ? 1 : (n * factorial(n - 1));\n}\n\nfactorial(5);\nRun Code Online (Sandbox Code Playgroud)\n一切都好。我们保证,该factorial(5)表达式在编译时得到解析,因为consteval. 正确的?如果是这样,我认为这应该意味着factorial(n - 1)调用 Factorial(5) 中的递归也在编译时解决。然而,我们也知道,声明中的int factorial(int n)参数int n只是一个变量,而不是constexpr。如果我们尝试做这样的事情,这会产生影响:
consteval int factorial(int n)\n{\n // 1 \n constexpr auto res = factorial(n - 1); // error: \xe2\x80\x98n\xe2\x80\x99 is not a constant expression\n \n // 2\n return n <= 1 ? 1 : (n * …Run Code Online (Sandbox Code Playgroud)