10——operator=返回reference to *this】的更多相关文章

注意operator=返回一个引用,便于连锁赋值…
1.令operator= 返回一个reference to *this,为什么? 这只是一个协议,并无强制性.但是,为了与基本类型的行为保持一致性,强烈建议这么做.设计class 有一个宝典:一旦有疑惑,请参考int类型的行为,并遵循之. 2.不光operator=,与它类似的赋值相关运算,也应该遵循该协议.…
赋值操作为什么要返回 reference to *this? 要弄清这个问题之前,先了解函数的返回值类型:返回值类型,返回引用类型 返回值类型:返回的是一个对象的副本. test operator= (const test &t) { ... cout << "赋值" << endl; return *this; }      当程序中出现test对象之间的赋值操作时, 调用 operator函数.当return *this的时候,会执行拷贝构造test…
//先看看下面这个例子 class Rational{ public: Rational(int num, int denu) :numirator(num), denumirator(denu); const Rational operator*(const Rational & lhs, const Rational & rhs);//注意这里的返回类型 private: int numirator; int denumirator; }; operator返回的是一个value而不是…
Effective C++ 学习笔记 10 让=返回指向*this的引用 Table of Contents 1. 原因 2. 建议:在没有充分理由标新立异前,最好的做法是遵从传统. –by SkyFire 1 原因 在C++中,连锁赋值是合法的,新类型的=操作符应该尽量遵从这一规定(其 实他并不是规定),对于你的类,应该可以这样操作: MyClass a; MyClass b; MyClass c; a=b=c; 2 建议:在没有充分理由标新立异前,最好的做法是遵从传统. Author: Ub…
c++程序员经常犯的一个错误是让operator=返回void,这好象没什么不合理的,但它妨碍了连续(链式)赋值操作,所以不要这样做. 一般情况下几乎总要遵循operator=输入和返回的都是类对象的引用的原则,然而有时候需要重载operator=使它能够接受不同类型的参数.例如,标准string类型提供了两个不同版本的赋值运算符: string& // 将一个string operator=(const string& rhs); // 赋给一个string string& //…
比如: Widget& operator=(const Widget& rhs) { ... return* this; } 令赋值(assignment)操作符返回一个reference to *this…
class Widget { public: ... Widget& operator+=(const Widget& rhs) // 返回类型是个reference,指向当前对象 { ... return *this; } Widget& operator=(int rhs) // 此函数夜适用,即使此一操作符的参数类型不符协定 { ... return *this; } } 注意 这只是一个协议,并无强制性. 这个协议适用于所有赋值相关运算. 这份协议被所有内置类型和标准程序库…
关于赋值,可以写成连锁形式: int x, y, z; x = y = z = 15; //赋值连锁形式 赋值采用右结合律,故上述赋值被解析为: x = (y = (z = 15)); 为了实现连锁赋值,赋值操作符必须返回一个reference引用指向操作符的左侧实参. 下面示例是为classes实现赋值操作符时应该遵循的协议: class Widget { public: ... Widget& operator=(const Widget& rhs) //返回类型是个reference…
例如对象x,y,z.要实现连锁赋值(假设operator=已经重载过了):x = y = z,那么operator=则必须返回一个*this. 注意这个条款不仅仅适合于operator=,对于operator+=与赋值相关的操作也是同样适合的.所以的想要连环赋值的情况都应该这样去设计,尽管编译器不会说明这是一种错误.…