右值引用就是就是必須繫結(bind)到右值的引用。
在c++ 11 誕生之前,廣泛使用的c++ 98 中的引用其實是左值引用,請看下面這個例子:
int a =0;
// a is a lvalue
int&b = a;
// b is a lvalue reference(before c++11, it's reference)
//何為右值引用
int&&c =0;
// c is an rvalue reference
利用左值引用和右值引用的不同實現函式過載
請看下面這個例子:
void
printint
(int
&a)void
printint
(int
&&a)
// some code about main() ...
int a =10;
printint
(a);
// a is lvalue, so call printint(int &a)
printint(10
);// 10 is rvalue, so call printint(int &&a)
a是變數,變數是左值,所以在執行printint函式時呼叫的是第乙個函式。
而10是字面常量,是右值,所以執行printint函式時呼叫的是第二個函式
通過上面的小例子,大家知道如何在程式使用左值引用和右值引用了嗎?
然而,右值引用被設計出來當然不只是為了簡簡單單的實現函式過載。利用右值引用,我們可以將臨時物件或者即將消失的物件(右值)傳入到自定義類中,也即對建構函式進行過載,這便是移動建構函式
右值引用和物件移動
c 包括 c 中所有的表示式和變數要麼是左值,要麼是右值。通俗的左值的定義就是非臨時物件,那些可以在多條語句中使用的物件。所有的變數都滿足這個定義,在多條 中都可以使用,都是左值。右值是指臨時的物件,它們只在當前的語句中有效。為了支援移動操作,c 11引入了一種新的引用型別 右值引用。就是必須繫結到...
C 右值引用與移動構造
c 中提供了兩種引用方式。左值引用與右值引用。其中右值引用是c 11的新標準新增的內容。所謂的右值引用就是必須繫結到右值的引用。在介紹之前,先說明一下c 中的左值和右值的規定。實際上,最早在c語言中就有了左值和右值之分。最初的左值即指在賦值號左邊的變數,右值指在賦值號右邊的變數。隨著c語言的發展和c...
C 移動語義和右值引用
移動語義類似於在計算機中移動檔案的情形 實際檔案還留在原來的地方,而只修改記錄。例如有乙個函式,它返回乙個vector物件 要實現移動語義,需要讓編譯器知道什麼時候需要複製,什麼時候不需要。這就是右值引用發揮作用的地方。可定義兩個建構函式,其中乙個是常規複製建構函式,它使用const左值引用作為引數...