【发布时间】:2018-01-19 16:08:59
【问题描述】:
在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 分配给我的浮点数。它摆脱了错误。我不知道这是否违背了目的或还有什么其他后果。
【问题讨论】:
-
简答:使用
constexpr而不是const。 -
“我内联了这些变量以进行优化。” - 它变得更快了吗?
-
浮点与整数类型的处理方式不同,主要是为了与 C++03 兼容,有关详细信息,请参阅 Constant expression initializer for static class member of type double。
标签: c++ compiler-errors static-variables inlining