C ++:"(static const double variable)不能出现在常量表达式中#34;

时间:2018-01-19 16:09:00

标签: c++ compiler-errors static-variables inlining

classA我得到了:

static const double alias_var = classB::const_var;

然后在classB

static const double const_var = 1000.;

但编译器一直告诉我:

  

' CLASSB :: const_var'不能出现在常量表达式中。

为什么不呢?有趣的是,如果我将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分配给我的浮点数。它摆脱了错误。我不知道它是否会破坏目的或产生其他后果。

1 个答案:

答案 0 :(得分:4)

简短回答:使用constexpr代替const

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

使用C ++ 11,constexpr删除了此限制。