2014-09-06 28 views

回答

3

在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

+1因爲一些匿名downvoter downvoted。順便說一句,我曾經做過一個相當漂亮的版本。它在一些SO回答某處。 – 2014-09-06 13:58:00

+0

由於OP添加了[visual-C++]標記,因此可能需要添加一個語言擴展,它可以將類型rvalues綁定到非常量左值引用。 – dyp 2014-09-06 14:00:01

+0

@dyp:好點,完成。 – 2014-09-06 14:02:31

相關問題