摘自《C++ Primer》第五版
C語言中,左值可以位於賦值語句的右側,右值則不能。
C++中,一個對象被用作右值時,用的是對象的值(內容);當對象被當做左值的時候,用的是對象的身份(在內存中的位置)。 一個左值表達式的求值結果是一個對象或者一個函數。當然,以常量對象爲代表的某些左值實際上不能作爲賦值語句的左側運算對象(本人理解:功能不全的左值;除了自己的初始化,一般不用作左值使用。)
個人理解:左值一般和地址有關係。
操作符 | 操作數 | 求值結果 | 備註 |
算數運算符 | 右值 | 右值 | |
邏輯運算符和關係運算符 | 右值 | 右值 | |
賦值運算符 | 左側操作數必須是可以修改的左值 | 左值 | |
遞增/遞減運算符 | 左值 | 前置版本返回左值,後置版本返回右值 | |
成員訪問運算符(. ->) | 箭頭運算符求值結果是一個左值;點運算符區分情況:如果成員所屬的對象是左值,那麼返回結果是左值,反之,返回右值。 | ||
條件運算符 | 無要求 | 當?後面的兩個表達式都是左值或者能轉換成同一種左值類型時,運算結果是左值;否則運算結果是右值。 | |
位運算符 | 無要求;操作數爲整形或可以提升爲整形的char | 右值 | 推測 |
sizeof運算符 | 無要求 | ||
逗號運算符 | 無要求 | 和右側運算對象保持一致,右側運算對象是左值,結果也是左值 |