首页 > 其他 > 详细

左值和右值

时间:2017-02-18 17:21:55      阅读:243      评论:0      收藏:0      [点我收藏+]

定义:

左值:用的是对象的身份
右值:用的是对象的值(内存)

decltype:

当其作用于表达式时,如果求值结果是左值,那么返回一个引用
如果求值结果是右值,那么返回正常
  1. int *p;
  2. decltype(*p); //解引用运算生成左值,所以结果是int&
  3. decltype(&p); //取地址生成右值

成员运算符:

箭头作用于指针类型的对象,结果是一个左值。
点运算符分成两种情况,成员所属对象是什么值,则返回什么值
  1. pstr->size(); //返回一个左值
  2. (*pstr).size(); //要看成员所属对象
//未实践

条件运算符:

  1. cout<<( (it == vec.end())? "no" : "yes" )<< endl;
 /*如果两个表达式都是左值或者能转换成同一种左值 返回左值*/

对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
const classA operator*(const classA& a1,const classA& a2);
operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:
classA a, b, c;
(a * b) = c; // 对a*b的结果赋值
操作(a * b) = c显然不符合编程者的初衷,也没有任何意义


函数返回值:

函数的返回类型决定返回是否为左值:
当函数返回引用的时候所得到的是左值,其它所得到的都是右值。
  1. int fo(int a, int b)
  2. {
  3. return a + b;
  4. }
  5. int &t = fo(2, 3); //error:非常量引用初始值必须是左值


函数返回值是右值?




左值和右值

原文:http://www.cnblogs.com/Przz/p/92e582835e55fcb3ad7a5f1d101725a9.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!