2010-05-12 64 views
9

我想知道如果任何人都可以解釋以下對我說:如果我寫在C++中爲const int分配一個指針變量?

int i = 0; 
float* pf = i; 

我得到一個編譯錯誤(GCC 4.2.1):

error: invalid conversion from ‘int’ to ‘float*’ 

有道理 - 他們顯然兩種完全不同的類型。但如果我寫

const int i = 0; 
float* pf = i; 

它編譯沒有錯誤。爲什麼'const'在作業的右邊有所作爲?是不是'const'關鍵字的想法的一部分能夠強制常量值的類型約束?

我已經能夠想出任何解釋感覺有點虛假。而且我的解釋也沒有解釋這樣的事實:

const int i = 1; 
float* pf = i; 

無法編譯。任何人都可以提供解釋嗎?

回答

10

你的第二個例子只是恰好由轉換規則來覆蓋如§4.10/ 1(C++ 03)指定:

空指針常數是整數表達式(5.19)整數類型的rvalue值爲零。空指針常量可以轉換爲指針類型;結果是該類型的空指針值,並且可以與指向對象的指針或指向函數類型的指針的每個其他值區分開來。

相關問題