《Effective C++ 》学习笔记——规定10「建议收藏」

《Effective C++ 》学习笔记——规定10

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

***************************************转载请注明出处: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********************************************

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116694.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python简单小游戏代码贪吃蛇_plc程序做贪吃蛇游戏

    python简单小游戏代码贪吃蛇_plc程序做贪吃蛇游戏贪吃蛇小游戏相信80、90后小时候肯定都玩过,那么你知道如果通过Python来实现吗?今天小千就来教大家。首先给大家看一下最终的呈现效果:基本准备首先,我们需要安装pygame库,小编通过pipinstallpygame,很快就安装好了。在完成贪吃蛇小游戏的时候,我们需要知道整个游戏分为四部分:1.游戏显示:游戏界面、结束界面2.贪吃蛇:头部、身体、食物判断、死亡判断3.树莓:随机生成4.按键控制:上、下、左、右游戏显示首先,我们来初始化pygame,定义颜色、游戏界面的窗口大小、标题

    2022年8月10日
    13
  • matlab画三维图像例题_matlab画三维曲面

    matlab画三维图像例题_matlab画三维曲面我可能真的太闲了吧···在网上看到这图觉得挺好看:t=0:pi/360:2*pi;x=sin(t);y=cos(t);z=2*x.^2+y.^2;figureplot3(x,y,z,’Color’,’r’,’LineWidth’,2);xlabel(‘x’);ylabel(‘y’);zlabel(‘z’);title(‘z=(cost)^2+2*(sint)^2’);ax…

    2022年10月11日
    3
  • Oracle创建表空间和创建临时表空间

    Oracle创建表空间和创建临时表空间/*第1步:创建临时表空间 */createtemporarytablespacekc_temptempfile’C:\app\Administrator\oradata\orcl\kc_temp.dbf’ size50m  autoextendon  next50mmaxsize20480m  extentmanagementlocal;   

    2022年7月27日
    6
  • 分享一个年化15%以上的无风险套利机会「建议收藏」

    分享一个年化15%以上的无风险套利机会「建议收藏」更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。数字货币期现套利原理数字货币市场,是近期大家关注度相当高的一个市场。在这个市场中,存在着现货交易(数字

    2022年8月6日
    7
  • sqlserver2005备份集中的数据库备份与现有的数据库不同

    sqlserver2005备份集中的数据库备份与现有的数据库不同 使用SqlServer 2005还原 2000的备份数据库时,报备份集中的数据库备份与现有的数据库不同的错误.

    主要由于新建的数据与备份集中的不同导致

    解决办法:选项 -->还原选项 -->覆盖现有数据库 --> 确

    2022年5月7日
    37
  • 面试题(状态压缩dp)

    面试题(状态压缩dp)题解状态压缩dp,f[i][j]代表第i行状态为j的方案数#include<bits/stdc++.h>using namespace std;#define x first#define y second#define send string::npos#define lowbit(x) (x&(-x))#define left(x) x<<1#define right(x) x<<1|1#define transformu(s) tr..

    2022年8月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号