zoukankan      html  css  js  c++  java
  • 《Effective C++ 》学习笔记——规定10

    ***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************



    二、Constructors,Destructors and Assignment Operators


    Rule 10:Have assignment operators return a reference to *this

    规则10:令operator= 返回一个 reference to *this



    关于赋值,有一个非常有趣的连锁代码:

    int x,y,z;
    x = y = z = 15;    // 赋值的连锁形式

    并且,C++採用右结合律,假设用括号来代表优先计算顺序。就是这种:

    x = ( y = ( z = 15 ) ) ;


    C++中,为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左側实參。

    (注意。这是classes 实现赋值操作符时应该遵循的协议

    <span style="font-size:14px;">class Widget  {
    public:
        ...
        Widget& operator=( const Widget& rhs )<span style="white-space: pre;">		</span>// 返回类型是个reference
        {
            ...
            return* this;<span style="white-space: pre;">					</span>// 返回左側对象
        }
        ...
    };</span>

    并且这个协议不仅适用于以上的标准赋值形式,也适用于全部赋值相关的运算。比方+=、-=、*= 等:

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

    可是,要注意这仅仅是一个协定。并无强制性,假设不遵循它,代码一样能够通过编译

    然而这份协议被全部内置类型和标准程序库提供的类型,如 string、vector、complex,trl::shared_ptr 等共同遵守。

    所以除非有足够的理由去另类一下,不然还是从众吧。


    ☆请记住

    令 assignment(赋值) 操作符返回一个 reference to *this。




    ***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

  • 相关阅读:
    Linux 日志管理
    Linux 备份与恢复
    Linux 启动管理
    Linux 用户和用户组管理
    产生指定时间区间序列、按指定单位变化时间 python实现
    python上数据存储 .h5格式或者h5py
    数据预处理之独热编码(One-Hot Encoding)
    残差网络
    GBDT为什么不能并行,XGBoost却可以
    百融金服、趣店、中航信面试总结
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5041098.html
Copyright © 2011-2022 走看看