`
kmplayer
  • 浏览: 496990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款15:令operator=传回"*this的reference"

 
阅读更多
1,assignment动作可以串连在一起.
string w, x, y, z; 
w = x = y = z = "Hello";
赋值使用右结合律,上述行动串被解析成这样:
w = (x = (y = (z = "Hello")));
或是:
w.operator=(x.operator=(y.operator=(z.operator=("Hello"))));
可见:y.operator=的引数就是前次调用operator=后的传回值.

2,常犯的错误:
(1)令opertor=传回void,它会妨碍assignment动作串链的形成.
(2)令opertor=传回一个const对象的引用.
如:const Widget& operator=(const Widget& rhs);   
考虑下面的情况:
Widget w1, w2, w3;
(w1 = w2) = w3; //给const赋值
将导致段错误.

3,总结:你没有什么选择.
assignment总是传回一个reference,指向其左侧引数,即:*this.
分享到:
评论

相关推荐

    Effective.C++.中文第二版.50条款doc文档.chm

    条款15: 让operator=返回*this的引用 条款16: 在operator=中对所有数据成员赋值 条款17: 在operator=中检查给自己赋值的情况 第四章 类和函数:设计与声明条款 条款18: 争取使类的接口完整并且最小 条款19: 分清成员...

    Effective C++

    条款15:让OPERATOR=返回*THIS的引用 条款16:在OPERATOR=中对所有数据成员赋值 条款17:在OPERATOR=中检查给自已赋值的情况 3、类和函数:设计与声明 条款18:争取使类的接口完整并且最小 条款19:分清成员函数,非成员...

    C++ HTTP - Reset32

    rest32======rest32是从C + +的Windows上调用REST Web服务](http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services)库。...这将是一段时间,在此之前,生产准备,但我是饲料中的公共...

    C++ HTTP Reset32

    C++ HTTP Reset32,HTTP可安装项目,提供大家下载!

    摩托罗拉C++面试题

    子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等等 15.为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果。 16.介绍一下模板和容器。如何...

    用C++编写的分数加减乘除的运算

    fen operator+(fen &f1); fen operator=(fen &f1); private: int a,b; }; fen fen::operator +(fen &f1) { int x,y,g(1); x=a*f1.b+b*f1.a; y=b*f1.b; for(int j=2;j;j++) if(x%j==0&&y%j==0&&j) g=(g>j?...

    Effective C++(第三版)

    条款10:令operator= 返回一个reference to *this have assignment operators return a reference to *this. 条款11:在operator= 中处理“自我赋值” handle assignment to self in operator=. 条款12:复制对象时...

    c++基础面试题

    String& String::operator=(const String &rhs) { if ( this==&rhs) return*this ; delete []m_data; //删除原来的数据,新开一块内存 m_data =newchar[strlen(rhs.m_data) +1]; strcpy(m_data,rhs.m_data); ...

    006_OSQP: An Operator Splitting Solver forQuadratic Programs

    006_OSQP: An Operator Splitting Solver forQuadratic Programs osqp原理推到及实现文档

    Effective C++ 中文版

    条款10:令Operator=返回一个referenceto this 条款11:在Operator=中处理“自我赋值” 条款12:复制对象时勿忘其每一个成分 3.资源管理 条款13:以对象管理资源 条款14:在资源管理类中小心Coping行为 条款15...

    shell脚本报错:"[: =: unary operator expected"解决办法

    主要介绍了shell脚本报错:"[: =: unary operator expected"解决办法的相关资料,需要的朋友可以参考下

    解析c++中的默认operator=操作的详解

    在c++中,如果没有定义operator=操作,编译器会提供一个默认的operator=操作。由于operator=操作和拷贝构造函数的功能类似,都执行拷贝操作。因此,编译器也分提供无用的默认operator=操作和非无用的默认operator=...

    shell脚本报错:”[: =: unary operator expected”解决办法

    shell脚本报错:”[: =: unary operator expected”解决办法  在匹配字符串相等时,我用了类似这样的语句: if [ $STATUS == OK ]; then echo OK fi  在运行时出现了 [: =: unary operator expected 的错误,就...

    operator=赋值检测学习

    operator=赋值自我检测,小程序,给自己参考学习

    string类的常用方法.pdf

    • operator=(const char* str): 将C风格字符串赋值给字符串。 ◦ operator=(const string& other): 复制另一个字符串。 3. 字符串连接: • append(const char* str): 连接一个C风格字符串到当前字符串的末尾。 ◦...

    多项式的加减乘除四则运算

    const Polynomial& Polynomial::operator=(const Polynomial &p)//完成测试 { if(this!=&p) { delete []coefs; delete []exps; size = p.size; coefs = new double[size]; exps = new int[size]; for...

    浙江大学 C语言 期末测试

    浙江大学2004-2005学年冬季学期 《C Programming》课程期末考试试卷

    重载赋值运算符

     operator= 必须重载为成员函数 重载函数原型为:  类型 & 类名 :: operator= ( const 类名 & ) ; 案例:完善Name类,支持=号操作。     具体看如下代码: #define _CRT_SECURE_NO_WARNINGS #include ...

    vs2019配置完qt出现问题解决

    问题 constexpr 函数 “qCountLeadingZeroBits” 不会生成常数表达式 (编译源文件 main.cpp) QtGuiApplication1 报错在 qalgorithms.h 文件中 解决办法 #define QT_POPCOUNT_CONSTEXPR +#define QT_POPCOUNT_...

    错误:unexpected operator.docx

    错误:unexpected operator.docx

Global site tag (gtag.js) - Google Analytics