2013-05-01 52 views
1

當我編碼的變量,我聲明如下:聲明存儲類

const int a = 4; 

爲「A」的變量,編譯器不會讓我改變?或者我會需要靜態const int a = 4?

謝謝!

回答

1

當你聲明它爲const時,你不能修改它。

const int a = 5; 
a = 6; 

不編譯(表達式必須是可修改的左值)。

+1

不完全正確。你可以用編譯器不會捕獲的方式通過指針間接修改它。 – 2013-05-01 19:48:12

2
const int a = 4; 

是編譯器不會讓你改變的變量。

靜態限定符更改變量行爲的方式。具體而言,這意味着變量在程序開始執行時「分配」,只有在程序終止時才釋放。特別是靜態類變量保持其狀態與實例化對象無關。函數中的靜態變量在函數調用之間保持其狀態。全局常量上的靜態限定符在這種情況下是冗餘的,僅用於確定內部/外部鏈接。

+3

什麼是「類變量」? (問題標記爲c,而不是C++。) – 2013-05-01 19:05:00

+1

在C中,全局常量上的靜態限定符也不是多餘的。 – 2013-05-01 19:44:13

+0

我想在C中看到關於「全局常量」的章節和經文。 – 2013-05-01 19:44:35

4

當你定義aconst int a = 4;,你不應該變化a,但不是必需的編譯器,以防止你這樣做。如果您嘗試直接修改a(如a = 5;),編譯器應生成診斷消息,但還有其他方法可以嘗試修改a編譯器不一定會捕獲的內容,例如* (int *) &a = 5;。如果你這樣做,C標準沒有定義結果行爲。添加static到定義不會改變這一點。

+0

好的指出,它不能保證。它不是變量上的寫保護選項卡,就像您可能希望的那樣。 – 2013-05-01 19:43:51