zoukankan      html  css  js  c++  java
  • C++primer学习——左值和右值

    定义:

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

    decltype:

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

    成员运算符:

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

    条件运算符:

    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显然不符合编程者的初衷,也没有任何意义
     
     

    函数返回值:

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



  • 相关阅读:
    uu 模块
    程序员都是好男人
    TCP基础知识
    最全 git 命令总结
    iOS 添加UIWindow不显示问题解决
    解决CFBundleIdentifier", Does Not Exist
    Mac 系统OS X>=10.9,怎么把默认的python切换成3.7或者更高
    OC算法练习-Hash算法
    设计模式架构模式
    runtime相关知识
  • 原文地址:https://www.cnblogs.com/Przz/p/92e582835e55fcb3ad7a5f1d101725a9.html
Copyright © 2011-2022 走看看