左值位於賦值運算子的左邊,它在記憶體中必須有實體。
右值位於賦值運算子的右邊,它可以存在於記憶體或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....