zoukankan      html  css  js  c++  java
  • Effective C++(10) 重载赋值操作符时,返回该对象的引用(retrun *this)

    问题聚焦:

    这个准则比较简短,但是往往就是这种细节的地方,可以提高你的代码质量。
    细节决定成败,让我们一起学习这条重载赋值操作符时需要遵守的准则吧。


    还是以一个例子开始:
    Demo

    // 连锁赋值
    x = y = z = 15;
    // 上面的表达式等价于
    x = ( y = ( z = 15 ) );


    为了实现上述的连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参。
    即:

    class Widget {
    public:
        Widget& operator=(const Widget& rhs)
       {
            ....
            return* this;
        }
    };


    这可以认为是一个协议,适用于所有赋值相关运算

    class Widget {
    public:
        ...
        Widget& operator+=(const Widget& rhs)
        {
            ....
            return *this;
        }
        Widget& operator=(const Widget& rhs)
        {
            ...
            return *this;
        }
    };


    使用这个协议的理由:所有内置类型和标准程序库提供的类型如:string, vector, complex, tr1::shared_ptr或即将提供的类型共同遵守。除非你有一个标新立异的好理由,不然还是随众吧。。

    小结:
    令重载赋值操作符返回一个当前对象的引用(reference to *this)


    参考资料:
    《Effective C++ 3rd》
  • 相关阅读:
    GitHub 的企业版
    我的Tag列表
    .net开发者对android开发一周的学习体会
    Ajax简单聊天B/S
    C#设计模式——享元模式(Flyweight Pattern)
    mongodb的sharding架构搭建
    Java设计模式
    LMAX架构
    Winform开发的常用类库
    C#设置本地网络(DNS、网关、子网掩码、IP)
  • 原文地址:https://www.cnblogs.com/suzhou/p/3638961.html
Copyright © 2011-2022 走看看