C 物件移動(2) 右值引用

2021-10-19 11:04:46 字數 948 閱讀 8680

右值引用就是就是必須繫結(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左值引用作為引數...