C 11右值引用的用法

2021-10-08 07:54:02 字數 1342 閱讀 7761

c++98提出引用,引用就是起別名,引用變數和被引用實體公用一塊記憶體空間,c++11新提出了右值引用這一概念,右值引用也是起別名,只是它只能對右值引用

區別引用和右值引用

引用的表現形式:t& ref  = 實體;   t&& ref  = 右值;

左值與右值是c

語言中的概念,但

c標準並沒有給出嚴格的區分方式,一般認為:

可以放在

=左邊的,或者能

夠取位址的稱為左值,只能放在=右邊的,或者不能取位址的稱為右值,但是也不一定完全正確

int g_a = 10;

// 函式的返回值結果為引用

int& getg_a()

int main()

1.

普通型別的變數,因為有名字,可以取位址,都認為是左值。

2. const

修飾的常量,不可修改,唯讀型別的,理論應該按照右值對待,但因為其可以取位址

(如果只是

const

型別常量的定義,編譯器不給其開闢空間,如果對該常量取位址時,編譯器才為其開闢空間),

c++11

認為其是左值。

3. 如果表示式的執行結果是乙個臨時變數或者物件,認為是右值。

4. 如果表示式執行結果或單個變數是乙個引用則認為是左值。

總結:

1. 不能簡單地通過能否放在

=左側右側或者取位址來判斷左值或者右值,要根據表示式結果或變數的性質

判斷,比如上述:

c常量

2. 能得到引用的表示式一定能夠作為引用,否則就用常引用。

c++11

對右值進行了嚴格的區分:  c

語言中的純右值,比如:

a+b, 100

將亡值。比如:表示式的中間結果、函式按照值的方式進行返回。

普通型別引用只能引用左值不能引用右值,const型別引用可以引用左值還可以引用右值

int main()

c++11

中右值引用:

只能引用右值,一般情況不能直接引用左值

int main()

右值引用乙個重要用法就是實現移動語義:就是將乙個物件中的資源轉移到另乙個物件中

語法規定右值引用只能引用右值,但是在一些場景下我們確實需要用右值引用去引用左值,這時候就通過move函式將左值**為右值,被轉化的左值,其生命週期沒有隨著左值的轉化而改變。

c 11 右值引用

右值引用 是一種復合型別,跟c 的傳統引用很類似。為更準確地區分兩種型別,我們把傳統的c 引用稱為 左值引用 而使用 引用 這一術語時,我們的意思同時包含兩種引用 左值引用和右值引用。右值引用的行為跟左值引用類似,不同之處在於 右值引用可以繫結到臨時量 右值 而 非const的 左值引用卻不能繫結到...

C 11 右值引用

消除兩個物件互動時不必要的物件拷貝,節省運算儲存資源,提高效率。能夠更簡潔明確地定義泛型函式。1.右值引用 int a a 1 here,a is an lvalue 上述的a就是乙個左值。c 11中左值的宣告符號為 為了和左值區分,右值的宣告符號為 printreference const str...

C 11右值引用

c 11中引入的乙個非常重要的概念就是右值引用。理解右值引用是學習 移動語義 move semantics 的基礎。而要理解右值引用,就必須先區分左值與右值。對左值和右值的乙個最常見的誤解是 等號左邊的就是左值,等號右邊的就是右值。左值和右值都是針對表示式而言的,左值是指表示式結束後依然存在的持久物...