在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_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 中有特殊规定,允许在常量表达式中使用作为静态整型常量的类成员。此规定不适用于非积分( double )。
在 C++11 中,constexpr
消除了此限制。
关于C++: "(static const double variable) cannot appear in constant-expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48345149/