int d = 1;
constexpr void add()
{
d++;
}
int main()
{
}
GCC 7.1将在下面报告错误。错误信息非常清楚。问题是我在constexpr中没有看到任何明确的解释来描述它是非法的。为什么在constexpr非成员函数中访问全局非常量变量是不合法的
有人可以解释规范中定义的规则这种情况下违反吗?
main.cpp: In function 'constexpr void add()': main.cpp:8:1: error: the value of 'd' is not usable in a constant expression } ^ main.cpp:4:5: note: 'int d' is not const int d = 1; ^
“至少存在一组参数值使得函数的调用可能是核心常量表达式的一个被评估的子表达式“ –
似乎违反规则#16(对象的修改,除非对象具有非易失性字面量类型并且其生命周期开始于表达式的评估内)。但是如果我改为无效的add() d = 2; }然后它可以通过。 – Kane
来自clang的错误消息看起来很清楚,常量表达式无法修改在该表达式之外可见的对象。但我仍然无法找到它在哪些规则中破解http://en.cppreference.com/w/cpp/language/constant_expression#Core_constant_expressions – Kane