2013-07-02 37 views
1

鑑於在標準中使用8.5.3p4,我如何確定T與T&參考兼容?

T w; 
T& t = w; 

我怎麼建立,使用8.5.3p4和p5,即r結合t以下,即,T是參考兼容T&

T& r = t; 

觀察到T是不相同的類型T&,既不是基類的T&,所以根據8.5.3p4我們不能說是T參考有關T&

+0

怎麼會'r'綁定到't'?對我來說,'t'和'r'都綁定到'w',不是嗎?我的意思是,在't'被定義之後,它不過是'w'的別名,還是我錯了? –

+0

'T w; T&t = w; T&r = t;'是合法的。 – Belloc

+0

是的,相當於'T w; T&t = w; T&r = w;'...不是? –

回答

2

在表達式`T & R =叔初始化器;」具有類型T,而不是在標準的T &,由5/5如下:

如果表達式最初具有類型爲「參考到T「(8.3.2, 8.5.3),在進行任何進一步分析之前將類型調整爲T.表達式指定由參考文獻 表示的對象或函數,表達式是左值或x值,取決於在 的表達式上。

2

短篇小說:

T&參考兼容T,但是這是不相關的。

TT(本身)是參考兼容的。這個事實被用來應用8.5.3p5。注意8.5.3p5的前幾個字「參考類型cv1 T1 ...」。所以cv1 T1 is T,而不是cv1 T1 is T&

長的故事:

T& r = t; 

tT型(引用自表情條紋類型表達t是不是lvalue-reference to T儘管事實的表達,可變它名字的類型是)與價值類別lvalue

T&r = t;是聲明和初始化lvalue-reference to T類型的變量r的聲明,用前面提到的表達式進行了複製初始化。

此初始化的操作是直接引用綁定。

在這種情況下T是兩個參考相關和參考兼容本身,因爲它是相同類型相同CV資格

8.5.3p4只是定義了這兩種類型的關係。

現在再來看看8.5。3P5改寫爲您的具體例子:

參考輸入「T」表達型的「T」初始化:

  • 如果參考是一個左值參考和初始化表達

    • 左值,和「T」是參考兼容帶「T」

所以這裏的T是值類型,而不是引用類型。