《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********************************************

时间: 2024-10-14 19:44:20

《Effective C++ 》学习笔记——规定10的相关文章

模板方法模式和Effective C++学习笔记

模板方法模式: 定义:定义一个操作中的算法的骨架,而将一些步骤延伸到子类中.模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤. (1),用了继承,并且肯定这个继承有意义的情况下,就应该要成为子类的模板,所以重复的代码都应该提升到父类中,而不是让每个子类去重复. (2),当我们要完成某一个细节层次一致的过程或者一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑模板方法模式来处理. (3),模板方法模式通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优

微软企业库5.0学习笔记(10)ASP.NET模块依赖注入

您可以使用HTTP模块,一个到ASP.NET HttpApplicationState类的扩展,在Global.asax编写代码强制ASP.NET在每一个页面请求时自动注入依赖的对象,就像在ASP.NET Web窗体应用程序中讨论的一样. 下列方法显示了一个合适的方法能够获取PreRequestHandlerExecute事件将它自己注入到ASP.NET的执行流水线,在每个页面请求中通过容器的BuildUp方法运行Http模块,并获取OnPageInitComplete事件.当OnPageIni

原型模式和Effective C++学习笔记

原型模式(Prototype):用原型实例制定创建对象的种类,并且听过拷贝这些原型创建新的对象. 浅复制:如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象:因此,原始对象及其副本引用同一对象. 深复制:把引用变量的对象指向复制过的新对象,而不是原有的被引用的对象. Effective C++: 1:在资源管理类中提供对原始资源的访问. (1),APIs 往往要求访问原始资源(raw resources),所以每一个 RAII class 应该提供一个"

APUE学习笔记——3.10文件共享

基本概念 内核使用3个数据结构描述一个打开的文件:进程表.文件表.V节点表 首先了解3种数据结构的概念 1 进程表 每一个进程有一个进程表.进程表里是一组打开的文件描述符,如标准输入0,标准输出1,标准错误2... 2 文件表 进程打开一个文件时,内核就为该文件创建一个文件表. 进程表对文件表是 一对多的关系    文件表对文件描述符也是一对多的关系(可能多个文件描述符指向同一文件表) 文件表中包含了文件状态标志.当前偏移量.和V-node pointer表项 文件状态标志如:read,  wr

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

Ionic2学习笔记(10):扫描二维码

作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5575843.html 时间:6/11/2016 ? ? 说明: 在本文发表的时候(2016-06-11),Ionic2是beta版本,所有还是会有一些改动比较大的地方: 点击查看 , 比如beta8版本(2016-06-06),相较于前面的版本就有一个特别大的改动的地方: @App and @Page should be replaced with @Component 基于这种情况,大家还是静静

Python学习笔记__12.10章 XML

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 XML虽然比JSON复杂,在Web中应用也不如以前多了,不过仍有很多地方在用,所以,有必要了解如何操作XML. 1.DOM vs SAX 操作XML有两种方法:DOM和SAX.DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点.SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件. 正常情况下,优先考虑SAX,因为DOM实在太占内存. 2.使用SAX解析XML 在Python

《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= 返

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简单的模块 #hello.py print ("Hello,World!") >>> import hello Traceback (most recent call last): File "<pyshell#56>", line 1, i