2

classA我有:

static const double alias_var = classB::const_var;

然后在classB

static const double const_var = 1000.;

但是编译器一直告诉我:

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

为什么不?有趣的是,如果我classB::const_var从 a更改double为a 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给我的浮点数。它摆脱了错误。我不知道这是否违背了目的或还有什么其他后果。

4

1 回答 1

4

简短的回答:使用constexpr而不是const.

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

在 C++11 中,constexpr消除了这个限制。

于 2018-01-19T16:14:11.300 回答