2011-05-20 36 views
4

Possible Duplicate:
typedef and containers of const pointers誤差在臨時附着到參考爲const

爲什麼代碼發射錯誤?

int main() 
{ 
    //test code 
    typedef int& Ref_to_int; 
    const Ref_to_int ref = 10; 
} 

的錯誤是:

error: invalid initialization of non-const reference of type ‘int&’ from a temporary of type ‘int’

我讀prolonging the lifetime of temporaries後它說,臨時對象可以綁定到const的引用。那爲什麼我的代碼沒有被編譯?

+1

什麼是錯誤? – 2011-05-20 11:30:45

回答

4

這裏ref的類型實際上是reference to int而不是const reference to int。 const限定符被忽略。

$ 8.3.2說

Cv-qualified references are ill-formed except when the cv-qualifiers are introduced through the use of a typedef (7.1.3) or of a template type argument (14.3), in which case the cv-qualifiers are ignored.

const Ref_to_int ref;相當於int& const ref;而不是const int& ref

+0

或者換句話說,'typedef'不是簡單的文本替換......並且'const'應該放在*它們符合人類的條件之後不要忘記它。 – 2011-05-20 11:45:49

0

您無法將其他說明符添加到typedef。它不像宏一樣工作。

你的代碼是有效

int& const ref = 10; // error 

這是無效的。

1

用typedef混合const不符合你的想法;有關更多信息,請參閱this question。這兩條線是相同的:

const Ref_to_int ref; 
int& const ref; 

您正在尋找:修復它是將其包含在自己的typedef(雖然你可能應該將其重命名,然後)

const int& ref; 

方式一:

typedef const int& Ref_to_int; 
+0

我認爲這個問題是針對所有意圖和目的的,與您提到的相同。 – 2011-05-20 11:37:17

+0

@Chris好點;指針和引用之間的區別並不重要 – 2011-05-20 11:38:50