`
kmplayer
  • 浏览: 506513 次
  • 性别: 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: 分清成员...

    Java英文单词汇总.doc

    * reference:引用 * info:信息 * insert:插入 * island:岛 * compare:比较 * ignore:忽略 * triangle:三角 * invert:反转 * diamond:钻石 * password:密码 其他 * document:文件 * display:显示 * ...

    effective c++

    14. **条款15:考虑使用`std::shared_ptr`** - 当多个对象共享所有权时,`std::shared_ptr`能自动管理资源的释放。 15. **条款16:理解`std::make_shared`的优势** - `std::make_shared`一次性构造共享指针及其所指...

    AT指令集锦

    #### 15. AT+CGMR **功能**: 查询模块型号。 **格式**: AT+CGMR **响应**: <型号> **示例**: ``` AT+CGMR Model: Wavecom Q24+ OK ``` 以上是对Wavecom模块中常用AT指令的详细解析,这些指令可以帮助开发者进行设备...

    用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?...

    Addison.Wesley.C++.by.Dissection.2002.pdf

    Based on the provided information from the file "Addison.Wesley.C++.by.Dissection.2002.pdf," we can derive a comprehensive overview of the C++ programming language as covered in this text. The book is...

    C++箴言:让=返回一个this的引用

    ### C++箴言:让=返回一个this的引用 在C++编程中,理解赋值运算符的行为至关重要,尤其是在自定义类中实现该运算符时。本文将深入探讨为何让赋值运算符`=`返回一个指向`this`的引用是一个优秀的编程实践,并解释...

    EffectiveC++终稿44__tagged_2019-06241

    **条款 10:令 operator= 返回一个 reference to *this** 赋值运算符应返回一个对赋值后对象的引用,使得链式赋值成为可能,同时提高了代码的可读性。 **条款 11:在 operator= 中处理“自我赋值”** 为了防止...

    为什么operator=操作符返回引用.docx

    在C++编程语言中,`operator=`操作符用于对象之间的赋值。这个操作符的返回类型通常是类类型的引用,这是为了支持链式赋值(chaining assignment)和保持与原始对象的连接。以下是对`operator=`操作符返回引用的详细...

    错误:unexpected operator.docx

    Shell 编程之 unexpected operator 错误解析 在 Shell 编程中,遇到「unexpected operator」错误时,不少开发者会感到困惑。今天,我们将深入探讨这类错误的成因和解决方法。 错误的成因 「unexpected operator」...

    如何继承“ operator =”

    在C++编程语言中,`operator=` 是一个特殊操作符,用于对象的赋值。它在类的设计中扮演着重要角色,特别是在实现深复制或浅复制策略时。当我们谈论“继承`operator=`”时,实际上是指在派生类中如何处理基类的赋值...

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

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

    operator=赋值检测学习

    在C++编程语言中,`operator=`是用于对象赋值操作的关键字,它定义了对象间的赋值行为。这个操作符通常被称为赋值运算符,是C++中的一个重载运算符,允许我们自定义对象如何被赋值。在本学习资源中,你将深入理解`...

    大整数类型的设计

    BigInt operator*(const BigInt& other) const; // 重载关系运算符 bool operator==(const BigInt& other) const; bool operator!=(const BigInt& other) const; bool operator<(const BigInt& other) const; ...

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

    在使用Shell脚本编程时,有时我们可能会遇到一个常见的错误提示:“[: =: unary operator expected”。这个错误通常出现在我们尝试进行条件判断时,尤其是当我们在`if`语句中使用`[ ... ]`或者`[[ ... ]]`进行比较...

    Effective C++

    15. **条款15:了解何时应该使用动态对象** - 动态对象用于表示运行时类型不确定或需要延迟创建的对象。使用`dynamic_cast`进行类型检查,但应谨慎使用,因为它降低了效率。 以上只是《Effective C++》的部分要点,...

    Effective C++(第三版)

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

Global site tag (gtag.js) - Google Analytics