【发布时间】:2019-03-14 19:44:06
【问题描述】:
我对在编译时知道意味着什么感到困惑。从下面的代码中,即使我传递了一个常量字面值 90 作为参数,编译器也不能计算 n 的值吗?为什么它给我一个错误,即表达式必须具有恒定值
constexpr int MAX_expr = 100;
const int MAX = 90;
void foo(int n)
{
constexpr int cExpr1 = MAX_expr + 7;
constexpr int cExpr2 = n + 7;
constexpr int cExpr1 = MAX + 7;
constexpr int cExpr2 = n + 7;
const int cExpr1 = MAX_expr + 7;
const int cExpr2 = n + 7;
const int cExpr1 = MAX + 7;
const int cExpr2 = n + 7;
}
int main() {
foo(90);
const int i = factorials(90);
}
使用同样的逻辑,factorials(int i) 不应该给出错误,因为它不知道将要传递什么参数,因此编译器将无法计算将要返回的内容?
constexpr int factorials(int i) {
return i > 1 ? i * factorials(i - 1) : 1;
}
【问题讨论】:
标签: c++ c++11 constants constexpr