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

failuer 2011-12-21 05:18:58
如题,导致1 += a;这样的表达式在C++中合法
代码如下:


#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;
}
...全文
470 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
failuer 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingliang1212 的回复:]
引用楼主 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……
[/Quote]
这个我知道,但我真正想问的是C++为什么禁止了operator= 重载为全局而不禁止operator op=
是基于什么原因?
RabbitLBJ 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingliang1212 的回复:]

引用楼主 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 ……
[/Quote]

++
学习了
iamnobody 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 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 &rhs)
……
[/Quote]

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



黯然 2011-12-21
  • 打赏
  • 举报
回复

#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;
}
黯然 2011-12-21
  • 打赏
  • 举报
回复
为什么不可以?
你重载了+=,返回一个int类型变量,当然也就可以直接输出了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧