C++

C++学习笔记

"C++中的左值与右值"

Posted by R0nzy on August 3, 2016

C和C++中的左值和右值比较起来还是有些出入的,C语言中的左值可以理解为“=”号左边的表达式,不能放到右边,右边表达式同样不能放到左边。

但是C++对与两者的关系做了进一步的深化。下面我大致总结了从从C++对于左值和右值需要注意的地方。


C++左值右值总结

  • 左值是一个对象或者表达式时,是取的对象或表达式在内存中的地址。当对象或者表达式是右值时取的是对象或者表达式的值或者内容。

  • 因为左值是代表的内存地址,故可以对左值这个内存地址进行读写操作。

  • 左值可以当作右值使用,右值不能作为左值使用。


举例

  1. 赋值运算符得到的结果是一个左值
    a=b=c;
    最后得到的结果是一个左值。

  2. 指针运算中“&”符号作用在一个左值对象上,返回一个指针对象并指向该对象,同时这个指针是一个右值,其值的内容为该对象的地址。
    char a='123'; char *p=&a;
    p是一个左值,&a的结果是右值,是一个地址常量。

  3. 内置解引用运算符、下标运算符、迭代器解引用运算符、string和vector的下标运算符的求值结果,都是左值。

  4. 递增递减运算符:a++是右值,++a是左值。


需要注意的地方

  • 函数返回值是引用类型时,可以用作左值,是其他类型时不能用作左值。 int & func(String a){ ... } int main(){ ... func(a)=..; return 0;}
    因为返回类型是引用所以可以用作左值。

  • 感觉这篇文章不错<a href=http://www.cnblogs.com/zpcdbky/p/5275959.html>话说C++中的左值、纯右值、将亡值</a>