C++:“(静态常量双精度变量)不能出现在常量表达式中”

C++: "(static const double variable) cannot appear in constant-expression"

classA 我有:

static const double alias_var = classB::const_var;

然后在 classB:

static const double const_var = 1000.;

但是编译器一直告诉我:

'classB::const_var' cannot appear in a constant-expression.

为什么不呢?有趣的是,如果我将 classB::const_vardouble 更改为 int,错误就会消失。

我内联了这些变量以进行优化。我希望使用浮点数不会妨碍优化。

我在 Ubuntu 64 位环境中使用 GCC 5.4.0。我确定我使用的 Qt4 与它无关。

编辑:我最好的解决方法是 classB:

static const int const_var_int = 1000;
static const double const var = const_var_int;

然后在 classA (任何其他地方)分配 const_var_int 给我的浮点数。它摆脱了错误。我不知道这是否违背了目的或还有什么其他后果。

简答:使用 constexpr 而不是 const

长答案:旧 C++03 中有特殊规定,允许 class 静态整型常量成员在常量表达式中使用。本规定不适用于非积分(双打)。

对于 C++11,constexpr 删除了此限制。