2013-03-27 60 views
0

我已閱讀,下面的代碼是有效的在C++ 11:這段代碼應該做什麼? (參照右值)

int && a = 3; 
a = 4; 

它是否應該寫入存儲器地址4,其中的數字文字3被存儲?也許一些編譯器優化可以防止這種情況發生,但它應該這樣做嗎?

+0

1.是和2. No. – 2013-03-27 11:35:31

回答

7

當您將不是類類型的prvalue分配給右值引用時,會創建一個臨時對象並將引用綁定到該對象。您只是修改臨時對象。

輸入「CV1 T1」的引用由類型「CV2 T2」的表達如下初始化:

  • 如果參考是一個左值參考[...]

  • 否則,或參考文獻應爲參考文獻

    • 如果初始化表達式

      • 是一個x值(但不是一個位域),類prvalue,陣列prvalue或功能左值[...],或

      • 具有類類型[...]

      [...]

    • 否則,創建類型爲「cv1 T1」的臨時文件,並使用非引用複製初始化(8.5)的規則從初始化器表達式初始化。然後參考文件被綁定到臨時文件。

概念上講,prvalue僅僅是可以或不可以有來自在存儲器中的某些對象的值。文字在內存中沒有相應的對象,所以這個規則強制一個對象被創建。

+1

你和我有一天在看這個。 :)不錯的巧合。 – GManNickG 2013-03-27 22:31:17