`

Effective c++学习笔记——条款10:令operator=返回一个*this的引用

 
阅读更多
Have assignment operators return a reference to *this
从题目,我们就要记住这条信息,让你的operator=函数return *this;
基本类型int、char等都提供了连锁赋值,并采用右结合律。
int x, y, z;
x = y = z = 15; 这句真正被解析为:x = (y = (z = 15));
为了实现连锁赋值,赋值操作符必须返回一个引用指向操作符左侧实参,这是通常在C++中为classes所遵循的协议。
下面看一个实际例子;

输出结果,如图所示
如书中所说,这只是个协议,并我强制性,如果不遵守,代码一样可以通过他编译。然而c++的内置类型,和stl如
string vector 等都遵守这个协议。所以,你最好按这个做吧。

请记住:

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

分享到:
评论

相关推荐

    Effective C++

    Effective C++(编程的50个细节)着重讲解了编写C++程序应该注意的50个细节问题,书中的每一条准则描述了一个编写出更好的C++的方式,每一个条款的背后都有具体范例支持,书中讲的都是C++的编程技巧和注意事项,很多都...

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

    条款23: 必须返回一个对象时不要试图返回一个引用 条款24: 在函数重载和设定参数缺省值间慎重选择 条款25: 避免对指针和数字类型重载 条款26: 当心潜在的二义性 条款27: 如果不想使用隐式生成的函数就要显式地禁止它...

    Effective C++ 中文版

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

    C++ HTTP - Reset32

    rest32======rest32是从C + +的Windows上调用REST Web服务](http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services)库。...我想,除非它可以改善并保持一个公共API,沿RestSharp线。

    摩托罗拉C++面试题

    不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。 const 指针仍然存在空指针,并且有可能产生野指针. 总的来说:引用既具有指针的效率,又具有变量使用的方便性...

    C++ HTTP Reset32

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

    Effective C++(第三版)

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

    string类的常用方法.pdf

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

    More Effective C++.pdf

    某些小范围主题诸如「在base classes 中使用virtual destructor」、「令operator= 传回*this 的reference」,可能在百科型C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背後的成因、最佳...

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

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

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

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

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

    c++基础面试题

    c++面试题 数据库 linux 已知String类定义如下: class String { public:  String(const char *str = NULL); // 通用构造函数  String(const String &another); // 拷贝构造函数  ~String(); // 析构函数  ...

    operator=赋值检测学习

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

    C++中 String 类的常用方法.md

    `String` 类在 C++ 中是一个非常基础和常用的类,用于处理字符串。以下是一些 `string` 类的常用方法: 1. **构造函数** * `string()`: 创建一个空字符串。 * `string(const char* s)`: 使用 C 风格的字符串 `s...

    Effective STL(中文)

    iterator的base得到iterator 条款29:需要一个一个字符输入时考虑使用istreambuf_iterator 算法 条款30:确保目标区间足够大 条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似...

    effective stl 中文 pdf

    条款10: 当心allocator的协定和约束 条款11: 了解自定义allocator的正统使用法 条款12: 对STL容器的线程安全性的期待现实一些 vector和string 条款13: 尽量使用vector和string来代替动态申请的数组 条款14: 用...

    C++ 内存管理

    class TestClass { public: void * operator new[ ](size_t size); void operator delete[ ](void *p); // .....}; void *TestClass::operator new[ ]...TestClass *p = new TestClass[10]; // ... etc ... delete[ ] p; }

    More Effective C++(中文版)

    某些小范围主题诸如「在base classes 中使用virtual destructor」、「令operator= 传回*this 的reference」,可能在百科型C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背后的成因、最佳...

    effective stl stl 技巧

    条款29:需要一个一个字符输入时考虑使用istreambuf_iterator 算法 条款30:确保目标区间足够大 条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在...

Global site tag (gtag.js) - Google Analytics