我正在阅读The C++ Programming Language并尝试了解Constants
。这本书说这是有效的:
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
中,如果我将其替换为ex。12.4
的值,如square(12.4)
,则错误消失<) / LI>
出现这些错误的原因是什么?我错过了什么?
答案 0 :(得分:1)
在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);
}