細談c 左值的概念

2021-08-08 13:02:17 字數 973 閱讀 5496

左值位於賦值運算子的左邊,它在記憶體中必須有實體。

右值位於賦值運算子的右邊,它可以存在於記憶體或cpu暫存器當中。(cpu和暫存器、記憶體是什麼關係可以看看

所以說左值一定可以作為右值,右值不一定能做左值。

1.所以說表示式運算結果或單個變數應該是可以定址的,即必須在記憶體中存在實體。(引用變數也不可定址,但它永遠只能是左值)

例如,表示式1+1就不可以作為左值。

2.常變數可以雖然可以定址,但由於唯讀限制,也不能作為左值。

3.如果表示式的運算結果是乙個臨時的無名物件,則不能作為左值。

#includeusing namespace std;

int func()

int main()

之所以會出現錯誤1和錯誤2是因為i+1和func()的運算結果是乙個臨時無名的物件,無法定址,所以並不能作為左值。

順道提一下i++和++i

i++的實現是:int temp; temp=i; i=i+1; return temp,返回的是乙個臨時變數temp。所以i++不能作為左值。

++i的實現是:i=i+1; return i; 返回的是乙個可定址的變數。++i可以作為左值。

4.如果表示式運算結果或單個變數是乙個引用的話可以作為左值。

#include using namespace std;

int global;

int &func()

int main(){

int i =2;

(i+=1)=5; //正確1

func()=6; //正確2

cout<

此時,i+=1的運算結果是對i的引用,func()返回的結果是對全域性變數global的引用,故此兩句均正確。

總結:1.根據變數或表示式運算結果的性質來判斷是否能作為左值。

2.能建立引用的表示式一定能作為左值,不能作為左值的表示式只能建立常引用。

C 左值和右值概念

本文主要就c 中左值和右值的一些概念進行討論。如果文中有錯誤或遺漏之處,敬請指出,謝謝!讓我們先看看一些常見的左值和右值舉例 int var 6 var is a lvalue const int var 6 var is a nonmodifiable lvalue hello,world the...

c 的左值與右值概念詳解

了解計算機儲存結構 cpu 是大腦執行二進位制指令 cpu中含有暫存器,該暫存器沒有位址,用於臨時儲存記憶體中的資料,一般情況下32位有8個暫存器,64位有16個暫存器,暫存器的特點訪問速度非常快,容量非常小 pam 訪問速度快,容量一般,一但掉電資料就沒了 磁碟 訪問速度慢容量巨大,永久性儲存資料...

C 左值右值

左值和右值判斷 1 可位於賦值號 左側的表示式就是左值 反之,只能位於賦值號右側的表示式就是右值。2 有名稱的 可以獲取到儲存位址的表示式即為左值 反之則是右值。例如 int main 移動建構函式 class test test const test parm data new int parm....