请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于重载后置++操作符与基本类型自带的不同的问题

int i{ 1 };
i = i++;

返回2。
如果是自定义的后置++,则返回老值。

T t{ 1.0,1.0 }
t = t++;

返回1.0,1.0。
这是怎么回事?请老师讲解。

正在回答

1回答

原则上课程之外的问题不做解答。这里的知识和课程中的内容有一定关系,可以用我们所学的知识解答清楚。你可以多看几次视频内容;首先

int i{ 1 };
i = i++;

的返回值你的理解应该有误,这里返回值是赋值表达式的返回值,不是2,是1;

你cout << (i=i++) << endl; 试试

T t{ 1.0,1.0 }
t = t++; 的问题利用我们课上的重载函数和赋值表达式的返回值的知识,我相信你可以自己解答了。

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_慕设计7103773 #1
    谢谢老师的解答,cout << (i=i++) << endl;的打印值为1。经过debug仔细查看Complex c{ 1.0,1.0 };c = c++;int i{ 1 };i = i++;的运作方式确实不同。自定义的++重载在";"结束前就已经完成,之后又进行了赋值操作,变回了原来的1.0,1.0。int的++是在";"结束后才进行的,所以在debug的时候得到的值为2。这也可以通过多次执行cout << (i=i++) << endl;与cout << (c=c++) << endl; 语句体现,前者每次打印的值在递增,后者始终为一个值。通过百度查询,猜测可能是编译器优化的结果,不知道这个猜测正确吗?如何才能让自定义的++重载与系统自带的相同?
    回复 有任何疑惑可以回复我~ 2020-04-03 15:50:09
  • quickzhao 回复 提问者 qq_慕设计7103773 #2
    你仔细看下我们Complex的前置后置操作符重载,是可以做到的,后置是先返回临时对象,再+1,前置是先对值+1,然后将对象返回。
    回复 有任何疑惑可以回复我~ 2020-04-03 22:18:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信