c 中左值右值的區分

2021-07-23 11:33:51 字數 792 閱讀 4916

左值右值來自於c語言。

左值:用來指代可以用在賦值表示式作則的東西,具體命名的物件、在記憶體中棧和堆上分配的物件,或者其他物件成員,總之就是有確定儲存空間的東西。

右值:指的是只能在賦值表示式右側出現的東西,如字面值和臨時物件。

左值引用只能被繫結到左值,不能被繫結到右值:

int a = 1;

int &b = a;//正確,因為a是乙個左值

int &c = 5;//錯誤,因為5是乙個字面值,是右值

但是一直能夠將乙個右值繫結到const左值引用上:

int const &d= 100;//正確

這個特殊的設定是為了能將臨時物件作為引用引數傳遞給函式,:

void reverse(srd::string const &str)

reverse(「howareyou」);//正確,這是乙個將臨時物件隱式的轉換成乙個左值引用。

void reverse(std::string &str)

reverse(「hello」); //error:invalidinitialization of non-const reference of type …

但是在標準中只有繫結到右值,而不能繫結到左值的右值引用:

int&& a = 0;//右值引用,宣告正確

int b = 1;

int && c = b;//錯誤,因為b是乙個左值

C 中的左值右值

對於 c 中的左值和右值,我們通常的說法是 當乙個物件被用作右值的時候,用的是物件的值 內容 當物件被用作左值的時候,用的是物件的身份 在記憶體中的位置 這句話來自於 c primer 第五版 第 121 頁,那麼,對於這句話,該作何理解呢?下面我想來談談我的看法 iso c 03規定表示式必須是左...

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

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

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

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