【发布时间】:2019-08-23 13:14:04
【问题描述】:
我试图理解 constexpr 应用于函数时的含义。在下面的示例中,程序编译并运行,但我不明白如何在编译时推导出函数 sum(int n),因为直到运行时才知道 n。我正在使用带有最新更新的 VS 2017。
无论是否包含 constexpr,程序都会编译。
#include <iostream>
constexpr int sum(int n)
{
return (n <= 0) ? 0 : n + sum(n-1);
}
int main()
{
int i;
std::cin >> i;
std::cout << sum(i) << std::endl;
return 0;
}
我预计编译器会出错 sum(int n) 不是常量表达式。还是 constepxr 只是对编译器的提示,例如“内联”,可以随意忽略?
【问题讨论】: