C 左值 右值

2022-04-06 09:54:49 字數 1661 閱讀 9020

最近在研究c++ 左值 右值,搬運、收集了一些別人的資料,供自己記錄和學習,若以後看到了更好的解釋,會繼續補充。(打「?」是我自己不明白的地方 )

參考:《boost程式庫探秘——深度解析c++準標準庫(第2版)》 9787302342731

右值(非左值):「匿名」的「臨時」變數,在表示式結束時生命週期終止,不能存放資料,可被修改,也可不被修改(const修飾)。

鑑別左值右值:

左值可用取位址操作符&獲取位址,右值不行,會發生編譯錯誤。

所有c++的表示式的結果不知左值就是右值(?)

++i 是左值,i++ 右值(返回的是乙個臨時變數,無法賦值);(?)

可以把右值得內容轉移到其他的物件中去,從而完全消除了之前昂貴的拷貝代價;

t&    左值引用;

t&& 右值引用(c++11)。

c++ primer 3rd

只有在必要的時候才使用後置操作符(i++),

前置操作符返回的是左值(物件本身),而後置操作符返回的是右值。前置操作符需要的工作更少,只需加1後返回加1後的結果;而後置操作符則必須先儲存原來的數值,以便返回未加1時的值,可能會花費更大的代價。

所以建議++i

visual studio 2013版本

每個 c++ 表示式是左值或右值。左值是指在單個表示式的外部保留的物件。 可以將左值視為具有名稱的物件。 所有變數(包括不能更改的 (const) 變數)都是左值。 左值是乙個不在使用它的表示式的外部保留的臨時值。 若要更好地了解左值和右值之間的區別,請考慮下面的示例:

//

lvalues_and_rvalues1.cpp

//compile with: /ehsc

#include using

namespace

std;

intmain()

在此示例中,x 是左值,因為它在定義它的表示式的外部保留。表示式 3 + 4 是為乙個右值,因為其計算結果為不在定義它的表示式的外部保留的臨時值

以下示例演示左值和右值的多種正確的和錯誤的用法:

//

lvalues_and_rvalues2.cpp

intmain()

說明

此主題中的示例闡釋了未過載運算子時的正確和錯誤用法。 通過過載運算子,可以使表示式(如 j * 4)成為左值。

當引用物件引用時,通常會使用術語「左值」和「右值」。 有關引用的詳細資訊,請參閱lvalue 引用宣告符:& 和規則引用宣告符:&&。

pasted from: 

>

c++ primer

當乙個物件被用作右值時,用的是物件的值(內容);當物件被用做左值的時候,用的是物件的身份。

原則:需要右值的地方可以用左值代替,但不能把右值當成左值(位置)來使用。

當乙個左值被當成右值使用時,實際使用的是它的內容。

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

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

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

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

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

就變數而言,對於一些變數,我們只會讀取並使用它們的值,而不會改變他們的值 唯讀 對於其餘的變數,我們既會讀取它們的值,有的時候還會改變它們的值 讀寫 這是很常見的。在c 中,前一種變數稱為右值,後一種變數稱為左值,例如 int a 1 a是左值,1是右值稍稍不同的一點是,在c 中,乙個變數是左值還是...