如何正确声明常量表达式?

时间:2014-03-29 16:36:41

标签: c++ compiler-errors constants

我正在阅读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);
}

我有两个错误:

  1. 表达式必须具有常量值(在x中,如果我将其替换为ex。12.4的值,如square(12.4),则错误消失<) / LI>
  2. 函数调用必须在常量表达式中具有常量值(在方法调用中。)
  3. 出现这些错误的原因是什么?我错过了什么?

1 个答案:

答案 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);
}