码迷,mamicode.com
首页 > 其他好文 > 详细

有关重载运算符的一些思考

时间:2020-07-30 19:45:24      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:bsp   类型   连续   com   loading   重载   问题   成员   tps   

重载“+”运算符后,执行a + b + c报错的原因分析:

 

技术图片 

1.所谓函数不能返回临时变量的引用,是指局部变量bai在栈空间中分配内存,函数返回du时栈指针回退,当主调函数继续调zhi用其它被调函数时,栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,如果此时再引用原来的局部变量就会出现不可预见的结果
https://zhidao.baidu.com/question/154445484.html
2.不论是成员还是非成员重载运算符,如果返回值类型是对象(不是引用),并且参数列表中的类型是引用,那么可能无法进行连续运算时比如a+b+c,b+c的返回值是个临时对象,不能为其绑定引用。如果返回引用,那么对于+运算会返回一个临时对象的引用,也可能会出问题(根据第一点)
3.所以如果重载类似+、-这样产生一个新对象的同时不改变原有参数的运算,可能无法进行连续运算比如a+b+c!

4.一点补充,无论是成员函数重载还是非成员函数重载都可能遇到这个问题,不过顺序不同。成员函数重载“+”返回类型是对象时,可以执行(a+b)+c(因为临时对象作为运算符函数的访问者而不是参数)不能执行a+(b+c)。非成员函数重载“+”返回类型是对象时,两种顺序均无法执行。

有关重载运算符的一些思考

标签:bsp   类型   连续   com   loading   重载   问题   成员   tps   

原文地址:https://www.cnblogs.com/BoysCryToo/p/13405399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!