在classA
我得到了:
static const double alias_var = classB::const_var;
然后在classB
:
static const double const_var = 1000.;
但编译器一直告诉我:
' CLASSB :: const_var'不能出现在常量表达式中。
为什么不呢?有趣的是,如果我将classB::const_var
从double
更改为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
分配给我的浮点数。它摆脱了错误。我不知道它是否会破坏目的或产生其他后果。
答案 0 :(得分:4)
简短回答:使用constexpr
代替const
。
长答案:旧C ++ 03中有一些特殊规定允许在常量表达式中使用静态积分常量的类成员。该规定不适用于非整数(双打)。
使用C ++ 11,constexpr
删除了此限制。