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

2021-08-11 01:53:29 字數 866 閱讀 7848

下面** 看出右值引用 跟左值引用的相似之處,都具有別名的左右,可以與它引用的變數共同修改位址內的內容

左值/右值引用可以延長臨時變數的壽命,直到該右值引用的壽命結束才析構

右值引用可以直接引用臨時變數(如常量 1 ,3.1等),且可以對它進行修改(不指定const)

左值引用一般不會用於引用臨時變數,雖然通過一些手段可以編譯成功,但不安全也沒有意義

struct reftest

~reftest()

std::string&& getrvalue_ref() &&

std::string& getlvalue_ref()

std::string str;

};void test1()

對於函式的返回值如果是臨時變數(函式內建的變數,既不是引數變數也不是類成員變數),不能返回引用!

對c++ 在編譯的時候會對返回值進行優化,如果返回的是臨時變數(注意不是引用!),則會直接使用該臨時變數的位址,不會進行內容的遷移和內參的釋放,因此效率比較高。這也說明返回值處一般不需要使用move來強制轉換右值,多此一舉。

int getrvalue()

int& getlvalue_ref()

struct rvaluetest

~rvaluetest()

int value = 2;

char * const str;

std::string cstr;

};rvaluetest&& getrvalue_ref()

rvaluetest getrvalue_test()

void reftest()

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

左值是指既能出現在等號左邊也能出現在等號右邊的變數 或表示式 右值則只能出現在等號右邊 返回左值引用的函式,連同賦值 下標 解引用和前置遞增 遞減運算子,都是返回左值的表示式 返回非引用型別 右值引用的函式,連同算術 關係 位以及後置遞增 遞減運算子,都返回右值的表示式 左值持久,右值短暫,左值有持...

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

c 裡一切值必須屬於左值 右值兩者之一。左值 一切變數 包括用const修飾的變數 物件 包括引用都屬於左值 右值 一切字面值 可以是巨集 臨時無名物件 函式返回值 表示式 如a n 說明一下 函式返回值,返回的是某乙個型別的值,並不是返回變數。左值並不是說能放在 左邊的值就是左值 雖然用const...

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

在c語言中,左值認為是賦值語句的左側,右值認為是賦值語句的右側。在c 中,意義稍有不同。c 中,每乙個表示式會產生乙個左值或者右值,相應的,該表示式也就被稱作 左值表示式 右值表示式 乙個左值表示式的求值結果是乙個物件或者是乙個函式。左值可以當右值使用,而右值不能當左值使用。c prime 中這麼簡...