學習筆記 C 右值引用

2021-09-22 12:31:54 字數 942 閱讀 7934

void f(string&& s);
之前不知道兩個&&是什麼意思,還以為是引用的引用,類似於二級指標的東西。。。。。。

後來參考了這篇文章

class a{

public:

a(){

cout<<"constructor"《明白了這個是右值引用。首先需要明確一下左值和右值的定義:

右值通過排他性定義,不是左值就是右值。

a()就是乙個右值,這是乙個臨時的a物件,但是&(a())是非法的,編譯會報錯"taking address of temporary"。這個臨時物件在記憶體中沒有位置標識,這個物件是右值物件,但是這個右值物件確實是儲存在記憶體中的,我們執行這樣一條語句:

a().p();

this指向臨時的這個a物件,確實輸出了這個臨時的a物件的位址。而且執行完這條語句後,就銷毀了這個臨時物件,輸出了destory。

其他的例如:

int a=2;

(a+2)=3;//error

a+2也是乙個右值,a+2的結果有可能只會儲存在cpu的暫存器中,不儲存在記憶體中,所以說a+2沒有記憶體的位置標識。

我們平時經常寫的這種語句:

a tmp;

a& ref=tmp;

ref其實是乙個左值引用,tmp是乙個左值,這段程式把左值引用ref和tmp繫結在一起。由於ref是左值引用,所以說:

a& ref=a()//錯誤,a()是右值

a&& ref=a()//正確,ref是右值引用

一般右值引用就是用乙個臨時物件進行操作,例如stl的map中:

//那麼我們我們可以這樣用:

mymap[a()];

//找到mymap中臨時物件對應的value,接著臨時物件就銷毀了

c 右值引用 學習筆記

僅為個人理解,個人筆記 部分 和內容引用於文章從4行 看右值引用 來自鏈結文章裡 include using namespace std int g constructcount 0 int g copyconstructcount 0 int g destructcount 0 struct a ...

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

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

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

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