從 談左值右值

2021-09-29 05:30:49 字數 540 閱讀 3224

看如下**:

int idata=0;

++++idata;

idata++++;

兩個問題:

1.上面的**能通過編譯嗎?

2.如果能,結果是什麼;如果不能,為什麼?

相信對c/c++語法熟悉的人來說,第乙個問題並不難,idata++++是非法的。

有點難度的是解釋為什麼不能通過編譯。要簡單回答這個問題,就涉及到了左值和右值的概念。

簡單理解,賦值操作符=左邊的就是左值,右邊的就是右值。

那麼沒有=操作符呢?就像上面**中一樣。看來簡單理解有點不夠用,繼續深入:

左值代表在當前上下文中,在記憶體中占有確定位置的物件(換句話說就是有乙個位址),否則就是右值。

那就得根據++操作符出現的位置來具體分析了。

很顯然,++出現在物件右側,要求目標物件必須是左值,idata++這樣的寫法沒有問題,關鍵是其運算結果是右值(想想為什麼),無法對其進行取址操作,因此idata++++就是非法的。

相比之下,++++idata則不存在任何問題。

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

2015 06 01 15 07 404人閱讀收藏 舉報 c 11 5 一 c 中的左值和右值 誤區 左值位於等號左邊,右值位於等號右邊。c 11中的定義 左值表示式表示的是乙個物件的身份 在記憶體中的位置 而右值表示式表示的是物件的值 內容 左值和右值都是針對表示式而言的,左值是持久的,右值是短暫...

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

1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...

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

1 左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值 左值必須要在記憶體中有實體 右值當在賦值號右邊取出值賦給其他變數的值 右值可以在記憶體也可以在cpu暫存器。乙個物件被用作右值時,使用的是它的內容 值 被當作左值時,使用的是它的位址。2 引用 引用是c 語法做的優化,引用的本質還是靠指標...