+ -
当前位置:首页 → 问答吧 → 为什么C++禁止重载operator=为全局操作符,而不禁止operator op=

为什么C++禁止重载operator=为全局操作符,而不禁止operator op=

时间:2011-12-21

来源:互联网

如题,导致1 += a;这样的表达式在C++中合法
代码如下:

C/C++ code

#include<iostream>

using namespace std;

class A
{
public:
    A(int i) : i(i){}
    int i;
};

int operator+=(int i, const A &rhs)
{
    return i + rhs.i;
}

int main()
{
    A a(123);
    
    cout<<(1 += a) <<endl;
    
    return 0;
}

作者: failuer   发布时间: 2011-12-21

为什么不可以?
你重载了+=,返回一个int类型变量,当然也就可以直接输出了

作者: shenxinji   发布时间: 2011-12-21

C/C++ code

#include<iostream>

using namespace std;

class A
{
public:
    A(int i) : i(i){}
    int i;
};

/*int operator+=(int i, const A &rhs)
{
    return i + rhs.i;
}*/

int operator+=(int &i, const A &rhs)  //这种是常见的对+=的重载,你看看应该就明白了
{
    i+=rhs.i;  
    return i;
}

int main()
{
    A a(123);
    
    cout<<(1 += a) <<endl;
    
    return 0;
}

作者: shenxinji   发布时间: 2011-12-21

引用楼主 failuer 的回复:
如题,导致1 += a;这样的表达式在C++中合法
代码如下:


C/C++ code

#include<iostream>

using namespace std;

class A
{
public:
A(int i) : i(i){}
int i;
};

int operator+=(int i, const A &amp;rhs)
……


因为你重载错参数了...
int& operator+=(int& i, const A &amp;rhs)//注意有2个&



作者: mingliang1212   发布时间: 2011-12-21