C++: "(static const double variable) cannot appear in constant-expression"

标签 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' cannot appear in a constant-expression.

为什么不呢?有趣的是,如果我将 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分配给我的浮点。它消除了错误。我不知道这是否违背了目的,或者还有什么其他后果。

最佳答案

简短回答:使用 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/

相关文章:

c++ - 模板化链接不适用于 -O2,但适用于 -O0

c++ - 无法使用 unique_ptr 和 deleter 进行编译

从 C : errors 调用 Lua 脚本

java - Java 8重写时该方法不明确

php - 递归功能 block 的最后一条语句执行了多少次?

在指针上调用 delete 时发生 C++ 崩溃

c++ - double 到固定宽度的字符串转换

shared-libraries - 主程序和共享库在 __static_initialization_and_destruction_0 中初始化相同的静态变量

Python 通过不同路径导入相同对象 - 类属性和基元之间的不同行为

c++ - 当我更改本地类名称时出现段错误