【发布时间】:2015-08-26 12:08:11
【问题描述】:
当使用g++ 4.8.2 和-std=c++11 标志编译以下代码时,它编译时没有错误:
constexpr double C = 299792.458;
const double local_max = 3.5;
static_assert(local_max < C, "can't go that fast");
编译以下代码时报错:
constexpr double C = 299792.458;
double x = 3.5;
const double local_max = x;
static_assert(local_max < C, "can't go that fast");
错误信息:
a.cc:在函数“int main()”中:
a.cc:6:2: 错误:静态断言的非常量条件
static_assert(local_maxa.cc:6:2: 错误:‘local_max’的值不能用于常量 表达
a.cc:5:15: 注意:'local_max' 没有被声明为 'constexpr' const 双local_max = x;
我的问题是为什么它在第一种情况下没有给出错误。
这是否取决于 const 变量是否使用 constexpr 初始化?
【问题讨论】:
-
x 在运行时获取它的值,而 static_assert 是编译时断言。您不能基于 x 制作 static_assert。