zoukankan      html  css  js  c++  java
  • 条款10:令operator= 返回一个reference to *this

    关于赋值,可以写成连锁形式:

    int x, y, z;
    x = y = z = 15;    //赋值连锁形式
    

    赋值采用右结合律,故上述赋值被解析为:

    x = (y = (z = 15)); 
    

    为了实现连锁赋值,赋值操作符必须返回一个reference引用指向操作符的左侧实参。

    下面示例是为classes实现赋值操作符时应该遵循的协议:

    class Widget
    {
    public:
    	...
    	Widget& operator=(const Widget& rhs)	//返回类型是个reference,指向当前对象
    	{
    		...
    		return *this;	//返回左侧对象
    	}
    	...
    };
    

    这个协议不仅适用于以上的标准赋值形式,也适用于所有赋值相关运算,例如:

    class Widget
    {
    public:
    	...
    	//这个协议适用于+=,-=,*=,等等
    	Widget& operator+=(const Widget& rhs)	//返回类型是个reference,指向当前对象
    	{
    		...
    		return *this;	
    	}
    	Widget& operator=(int rhs)	//此函数也适用,即使此操作符的参数类型不符合协定
    	{
    		...
    		return *this;	
    	}
    	...
    };
    

    这份协议被所有内置类型和标准程序库提供的类型如string,vector,complex,trl::shared_ptr或即将提供的类型共同遵守。

    请牢记:

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

  • 相关阅读:
    angularjs的$filter使用
    ngResource提交json数据如何带参数
    angularjs可交互的directive
    AngularJS $http配置为form data 提交
    让AngularJS的$http 服务像jQuery.ajax()一样工作
    mysql修改密码
    四种常见的 POST 提交数据方式
    跨域API
    cmd复制文件
    git查看日志
  • 原文地址:https://www.cnblogs.com/lwenwen/p/3468472.html
Copyright © 2011-2022 走看看