重载"<<"和"+"运算符后,对输出结果有疑问

pinkfIoyd 2016-11-03 06:15:55
代码如下:

#include <iostream>
using namespace std;
class Test
{
public:
Test(int _a){a = _a;}
Test(){}
Test& operator+(const Test& t1){
*this += t1;
return *this;
}
Test& operator+=(const Test& t1){
this->a += t1.a;
return *this;
}
friend ostream& operator << (ostream& os,const Test& t){
os<<t.a<<endl;
return os;
}
private:
int a;
};
int main(void)
{
Test t1(6);
Test t2(7);
cout << t1 + t2 << t1 + t2;
return 0;
}


为什么代码执行结果为:20,20?而不是13,20?
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlbertS 2016-11-04
  • 打赏
  • 举报
回复
你这个表达式有副作用啊,6+7+7岂不就是20了,这种表达式还是分两次写比较靠谱
paschen 版主 2016-11-03
  • 打赏
  • 举报
回复
到于输出的是:20,20而不是13,20 取决于编译器顺序点判断,是未定义行为 关于C,C++表达式求值顺序 http://bbs.csdn.net/topics/370153775
paschen 版主 2016-11-03
  • 打赏
  • 举报
回复
operator + 时不应该在自身上加,改成:

Test& operator+(const Test& t1){
		return Test(this->a + t1.a);
	}
kuangbao9 2016-11-03
  • 打赏
  • 举报
回复
cout<<t1+t2;
cout<<t1+t2;
这样就是13,20哎。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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