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

Posted boyscrytoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关重载运算符的一些思考相关的知识,希望对你有一定的参考价值。

重载“+”运算符后,执行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)。非成员函数重载“+”返回类型是对象时,两种顺序均无法执行。

以上是关于有关重载运算符的一些思考的主要内容,如果未能解决你的问题,请参考以下文章

思考: 对于一个要重载的运算符而言,什么样的运算符应该用类成员函数重载,什么情况应该用友元函数重载??

函数返回有关重载运算符的错误

扩展函数和运算符重载

重载运算符的 C++ 前向声明

想问大佬++操作符重载,前置和后置的问题?

[C++]关于重载运算符的一些建议