问答详情
源自:6-4 再看赋值构造函数和赋值运算符

Buffer & operator = 这个&和=号是做什么用的

以及到实现哪里

为什么Buffer & Buffer :: operator = (const Buffer & buf)

第一个&是做什么用的?

提问者:weixin_慕尼黑4374089 2023-02-18 23:35

个回答

  • 慕慕5299279
    2023-05-09 15:06:07

    Class &operator=(const Class& 别名); 

    这是赋值运算符重载的标准格式,形参为本类对象的常引用,返回值是本类对象自己的引用可以做左值,只能用类的成员重载--回答源于:Class &operator=(const Class &); 操作符重载什么意思???_百度知道 (baidu.com)


    我的理解就是:

    Buffer & Buffer :: operator = (const Buffer & buf)

    Buffer&表示左值,返回值是作Buffer类的左值

    Buffer :: operator =表示Buffer类中的赋值运算符(=)进行重载

    (const Buffer & buf)表示传入的值是Buffer类的常引用


    左值和右值的关系

    int a = 1;     // a 是左值

    int b = 2;     // b 是左值

    int c = a + b; // + 需要右值,所以 a 和 b 被转换成右值

                   // + 返回右值


    右值引用:数据类型&& 名称 = 右值;

    左值引用:数据类型& 名称 = 左值;

    常量的左值和右值引用:const 数据变量 &/&& 名称 = 左值/右值

    区分左值和右值:左值可以取地址,可以进行运算,右值是临时变量,取不到地址

    int&& a1 = sum(a,b);//sum(a,b)是右值,在函数结束后释放,不存在地址

    int& b1 = a1;//a1由上一行被赋值后,有地址是左值


    可能理解不到位,请多指教