C和C++中的左值和右值比较起来还是有些出入的,C语言中的左值可以理解为“=”号左边的表达式,不能放到右边,右边表达式同样不能放到左边。
但是C++对与两者的关系做了进一步的深化。下面我大致总结了从从C++对于左值和右值需要注意的地方。
C++左值右值总结
-
左值是一个对象或者表达式时,是取的对象或表达式在内存中的地址。当对象或者表达式是右值时取的是对象或者表达式的值或者内容。
-
因为左值是代表的内存地址,故可以对左值这个内存地址进行读写操作。
-
左值可以当作右值使用,右值不能作为左值使用。
举例
-
赋值运算符得到的结果是一个左值
a=b=c;
最后得到的结果是一个左值。 -
指针运算中“&”符号作用在一个左值对象上,返回一个指针对象并指向该对象,同时这个指针是一个右值,其值的内容为该对象的地址。
char a='123'; char *p=&a;
p是一个左值,&a的结果是右值,是一个地址常量。 -
内置解引用运算符、下标运算符、迭代器解引用运算符、string和vector的下标运算符的求值结果,都是左值。
-
递增递减运算符:a++是右值,++a是左值。
需要注意的地方
-
函数返回值是引用类型时,可以用作左值,是其他类型时不能用作左值。
int & func(String a){ ... } int main(){ ... func(a)=..; return 0;}
因为返回类型是引用所以可以用作左值。 -
感觉这篇文章不错<a href=http://www.cnblogs.com/zpcdbky/p/5275959.html>话说C++中的左值、纯右值、将亡值</a>