深入理解( )左值引用和( )右值引用

2021-10-25 03:01:55 字數 1119 閱讀 9706

左值是指既能出現在等號左邊也能出現在等號右邊的變數(或表示式),右值則只能出現在等號右邊

返回左值引用的函式,連同賦值、下標、解引用和前置遞增/遞減運算子,都是返回左值的表示式

返回非引用型別/右值引用的函式,連同算術、關係、位以及後置遞增/遞減運算子,都返回右值的表示式

左值持久,右值短暫,左值有持久的狀態,而右值要麼是字面常量,要麼是在表示式求值過程中建立的臨時物件(將要被銷毀的物件)。

引用是給乙個存在的物件定義的別名,乙個變數可以有多個引用,引用必須初始化,引用只能在初始化的時候引用一次,不能更改引用其他變數。

通過&獲得左值引用,左值引用只能繫結左值。

int intvalue1 = 10;

//將intvalue1繫結到intvalue2和intvalue3

int &intvalue2 = intvalue1, &intvalue3 = intvalue2;

intvalue2 = 100;

std::cout << intvalue1 << std::endl;//100

std::cout << intvalue2 << std::endl;//100

std::cout << intvalue3 << std::endl;//100

不能將左值引用繫結到乙個右值,但是const的左值引用可以,常量引用不能修改繫結物件的值

int &intvalue1 = 10;//錯誤

const int &intvalue2 = 10;//正確

通過&&獲得右值引用,右值引用只能繫結右值

右值引用的好處是減少右值作為引數傳遞時的複製開銷

int intvalue = 10;

int &&intvalue2 = 10;//正確

int &&intvalue3 = intvalue;//錯誤

使用std::move可以獲得繫結到乙個左值的右值引用

int intvalue = 10;

int &&intvalue3 = std::move(intvalue);

深入理解(例項) c 右值引用 左值引用

下面 看出右值引用 跟左值引用的相似之處,都具有別名的左右,可以與它引用的變數共同修改位址內的內容 左值 右值引用可以延長臨時變數的壽命,直到該右值引用的壽命結束才析構 右值引用可以直接引用臨時變數 如常量 1 3.1等 且可以對它進行修改 不指定const 左值引用一般不會用於引用臨時變數,雖然通...

左值和右值,左值引用和右值引用

左值 lvalue 這一術語 於c語言,用來指代那些可以用在賦值表示式左側的東西,具名物件 在棧和堆上分配的物件,或者其他物件的成員,總之就是又確定儲存空間的東西。而術語右值 rvalue 也是源自c語言,指的是只能在賦值表示式右側出現的東西,如字面值和臨時物件。只能繫結到左值,不能繫結到右值的引用...

左值 右值 左值引用 右值引用

2015 06 01 15 07 404人閱讀收藏 舉報 c 11 5 一 c 中的左值和右值 誤區 左值位於等號左邊,右值位於等號右邊。c 11中的定義 左值表示式表示的是乙個物件的身份 在記憶體中的位置 而右值表示式表示的是物件的值 內容 左值和右值都是針對表示式而言的,左值是持久的,右值是短暫...