2013-05-27 89 views
6

我知道i的類型在main()以下是int&。這就是爲什麼它必須被初始化。main()中的'i'類型。爲什麼它是一個int&?

int& f(){ static int i = 1; return i; } 

int main() 
{ 
    decltype(f()) i = f(); 
} 

但是用在標準段落5p5,我的結論是表達f()已鍵入int作爲參考被丟棄。

7.1.6.2p4,如果表達式f()是一個左值,考慮到引用是從函數返回中刪除的?

+0

請注意,這幾乎就是C++ 14'decltype(auto)'特性的工作方式。 – PlasmaHH

回答

6

基準計算表達式的類型(如每§5/5)時被丟棄,但是這並不改變的事實,函數調用表達式f()左值。每一段的C++ 11標準的5.2.2/10:

函數調用是左值如果結果類型是左值引用類型或右值參考起作用 類型,xvalue如果結果類型是右值對對象類型的引用,否則返回

換句話說,參考不從函數本身的返回類型下降,僅從評價函數調用表達式的類型(這是因此,int)。

該函數返回一個左值參考這一事實是允許相應的函數調用表達式作爲左值類型系統進行分類 - 這,反過來,允許decltype左值引用添加到該類型的的表達,從而產生int&

相關問題