我正在阅读The C++ Programming Language并尝试理解常量
。书上说这是有效的:
const int dmv = 17; // dmv is a named constant
constexpr double max1 = 1.4∗square(dmv); // OK if square(17) is a constant expression
但是当我这样做时:
constexpr double square(double x)
{
return x * x;
}
int main()
{
const double x = 40.0;
constexpr double result = 1.2 + square(x);
}
我有两个错误:
- 表达式必须有一个常量值(在
x
中,如果我将其替换为例如12.4
的值,例如square (12.4)
错误消失) - 函数调用必须在常量表达式中具有常量值(在 square 方法调用中。)
这些错误的原因是什么?我缺少什么?
最佳答案
在 C++11 之前,constexpr
并不存在,并且编译时算术只能用于整数类型(或多或少)。
在该语言中,尽可能使 const int
“变量”真正成为常量是有意义的,但对于 const double
则不然。
C++11 引入了 constexpr
,因此不再需要 const T
变量的特殊规则,但删除该规则会不必要地破坏现有代码。 C++11 还引入了编译时浮点运算,但由于 const double 变量以前从未被视为常量表达式,而现在更改这一点没有什么好处,因此您需要显式地说 constexpr
。
constexpr double square(double x)
{
return x * x;
}
int main()
{
constexpr double x = 40.0;
constexpr double result = 1.2 + square(x);
}
关于c++ - 如何正确声明常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733749/