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