2014-10-20 37 views

回答

4

它不能正常工作,修改常量變量是未定義的行爲。什麼事情都可能發生。

使用-Wall與海灣合作委員會,你會看到:

警告:寫入常量對象(ARG 2)

2

這是UB一般。
可能你會在你的情況下看到鑄件的結果。
例如:

void main(void) 
{ 
    int const x = 100; 
    int *x2 = &x; 
    *x2 = 2; 
} 

正在我的機器上,但

void main(void) 
{ 
    int const x = 100; 
    x = 2; 
} 

不是(編譯錯誤)。
無論如何,最好不要更改const變量。

2

它可以改變它,但行爲是不確定的,正如它在標準中提到的那樣!

及其在C11 6.7.3

下如果試圖修改通過使用與非const限定的類型的左值與一個常量限定類型定義的對象,該行爲是未定義。如果嘗試通過使用具有非揮發性限定類型的左值來引用用volatile限定類型定義的對象,則行爲是未定義的。

相關問題