0
作爲參考,我指的是正常參考 - 在「按參考調用」函數中使用的參考。這個引用和左值引用有區別嗎?引用和左值引用是否有區別?
作爲參考,我指的是正常參考 - 在「按參考調用」函數中使用的參考。這個引用和左值引用有區別嗎?引用和左值引用是否有區別?
在C++中有兩種引用:左值引用和右值引用。兩者都是參考。綁定到任何一種引用的函數參數是「通過引用傳遞」。
左值引用綁定到左值,和const左值引用也結合到右值。*
右值引用只結合右值和永不左值。
分離這兩種引用的效用在於,右值引用可以假設被引用的值不是別名(因爲它是一個純粹的右值(即臨時)或者是一個x值故意地宣佈爲eXpiring),因此可以在沒有人注意的情況下進行修改。
這使得移動資源和轉移所有權,這不能被前C++ 11,當引入右值引用正確表達的類型系統的概念。在此之前,只有一種參考,左值參考。
*)Microsoft編譯器還允許將非常量左值引用綁定到右值。這是非標準的,令人驚訝和困惑。
作爲提醒,在C值類別++分類法是這樣的:
value
/ \
glvalue rvalue
/ \ / \
lvalue xvalue prvalue
T & f() T && f() T f()
下邊是一個例子:函數調用表達式的值類別f()
被指示提供f
具有各自聲明的退貨類型(並且T
不是參考類型)。此外,函數的返回類型可以恢復爲decltype(f())
。
+1因爲一些匿名downvoter downvoted。順便說一句,我曾經做過一個相當漂亮的版本。它在一些SO回答某處。 – 2014-09-06 13:58:00
由於OP添加了[visual-C++]標記,因此可能需要添加一個語言擴展,它可以將類型rvalues綁定到非常量左值引用。 – dyp 2014-09-06 14:00:01
@dyp:好點,完成。 – 2014-09-06 14:02:31