我有一個例子:如何完成資格轉換?
int i = 1;
const int *b = &i;
在這種情況下,我不明白的是, 當i
地址被轉換爲指針到const int的。 i
不會在資格轉換中轉換爲常量整數嗎?在進行資格轉化時,究竟發生了什麼?
我有一個例子:如何完成資格轉換?
int i = 1;
const int *b = &i;
在這種情況下,我不明白的是, 當i
地址被轉換爲指針到const int的。 i
不會在資格轉換中轉換爲常量整數嗎?在進行資格轉化時,究竟發生了什麼?
引擎蓋下沒有任何反應。 const
是嚴格編譯時的實體。編譯器僅使用const
的知識來決定語句是否爲錯誤,而不是用於生成代碼。從而執行以下操作:
int i = 1;
const int *b = &i;
相當於
int i = 1;
int *b = &i;
在產生碼術語。但是如果你做到以下幾點:
int i = 1;
const int *b = &i;
*b = 1;
編譯器會注意到b
有const
(雖然它什麼都不知道的i
),並會出錯誤。但是,任何不被認爲是具有const常量的語句都會生成相同的代碼。我的
地址被轉換爲指針const int的
否。 &i
仍然是int
(不是const int
)的地址。在引擎蓋下int*
被隱式轉換爲const int*
。因此*b
不可修改,但i
仍可修改。
此外,認爲不同的方式:如果你的假設是真的,那麼下面就給編譯器錯誤,但事實並非如此:
int i = 1;
const int *b = &i;
int *c = &i; // perfectly valid !
+1很有幫助。這個答案來自哪個參考或書籍? – user1086635
@ user1086635:我沒有這方面的參考資料,但我相信你可以在標準的某處找到它。 – Dani