C++中的左值和右值

摘自《C++ Primer》第五版

C語言中,左值可以位於賦值語句的右側,右值則不能。

C++中,一個對象被用作右值時,用的是對象的值(內容);當對象被當做左值的時候,用的是對象的身份(在內存中的位置)。     一個左值表達式的求值結果是一個對象或者一個函數。當然,以常量對象爲代表的某些左值實際上不能作爲賦值語句的左側運算對象(本人理解:功能不全的左值;除了自己的初始化,一般不用作左值使用。)

個人理解:左值一般和地址有關係。

左值和右值轉換的一個重要原則:在需要右值的地方可以使用左值來替代,但是不能在需要左值(位置)的地方,使用右值。當然,也有一種例外的情況(參見P470,還沒看到)。

P149:左值是指那些求值結果爲對象或函數的表達式。一個表示對象的非常量左值可以作爲賦值

關於運算符操作數和返回值的左右值

操作符
操作數
求值結果
備註
算數運算符
右值
右值

邏輯運算符和關係運算符
右值
右值

賦值運算符
左側操作數必須是可以修改的左值
左值

遞增/遞減運算符
左值
前置版本返回左值,後置版本返回右值

成員訪問運算符(.  ->)

箭頭運算符求值結果是一個左值;點運算符區分情況:如果成員所屬的對象是左值,那麼返回結果是左值,反之,返回右值。

條件運算符
無要求
當?後面的兩個表達式都是左值或者能轉換成同一種左值類型時,運算結果是左值;否則運算結果是右值。

位運算符
無要求;操作數爲整形或可以提升爲整形的char
右值
推測
sizeof運算符
無要求


逗號運算符
無要求
和右側運算對象保持一致,右側運算對象是左值,結果也是左值


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章