左值和右值
1、左值右值的概念
C++的表达式要么是左值,要么是右值。左值表达式的结果一般为一个对象或者一个函数。
2、使用左值右值
(1)使用的实质
当一个对象被当做右值使用的时候,用的是内容。当一个对象作为左值使用的时候用的是对象的身份(对象在内存中的位置)。
(2)使用的原则
左值既可以当做左值使用,也可以当做右值使用。右值一定不可以当做左值使用
3、运算符与左值右值
不同运算符对运算对象要求不同(左值、右值),返回结果也不同(左值、右值)。
-
左值右值与赋值运算符
(1)右值一定不能作为赋值运算符的作则运算对象。
(2)某些左值(常量左值)也不能作为赋值语运算符的左侧运算对象。
(3)赋值表达式得到的结果仍是一个左值。 -
左值右值与取地址符
(1)作用于左值运算对象
(2)取地址表达式得到的结果是一个右值。(指向左值运算对象的指针,这个指针是一个右值。) -
内置解引用运算符、内置下标运算符、内置迭代器解引用运算符,内置类型string、vector的下标运算符
这些运算符的结果都是一个左值。 -
内置递增递减运算符、迭代器的递增递减运算符
(1)作用于左值运算对象。
(2)得到的结果可能是左值,也可能是右值。 -
decltype与左值右值表达式
(1)decltype作用于 左值表达式 得到的结果是引用类型
(2)decltype作用于 右值表达式 得到的结果是二重指针
4、运算符重载与左值右值
重载运算符时,可以重新定义运算符所接受的操作数对象(左值、右值)和所返回的结果(左值、右值)。但是应该尽量遵循内置类型运算符所接受的操作数对象类型和返回结果类型。
例如:重载赋值运算符时,返回的结果就应该是一个左值。