C++ 运算符重载 的参数问题,解释一下

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:16:05
Complex operator +(Complex &c);

Complex operator +(Complex c);

参数 &c 和 c 的联系和区别 ?为什么要加一个& ?

Complex operator +(Complex &c); //1

Complex operator +(Complex c); //2
第一种方式给运算符函数传递的是一个引用参数,在函数体中对引用参数c的改变会改变传入的实参本身。第二种方式给运算符函数传递的是一个值,实际上在函数体中传入的是实参的拷贝,在函数体中对参数的改变不会改变实参本身,而是改变实参的拷贝,实参的拷贝在函数调用结束时生命周期结束,自己本身不存在。
一般运算符重载的形式为
Complex operator+(const Complex &c);
参数声明文const则不允许在函数体中对参数c进行改变,也节省了传值方式中实参的拷贝方面的开销所以比较好。

&引用,相当于别名,传递的是地址,以后参数的改变就相当于实参变了

&X为引用,若在函数中改变了X的值,则返回后X值就是变了的,在运算符重载里没多大区别,引用调用可提高程序执行速度

你既然不知道这个,我也不用术语,简单点解释就是:
Complex operator +(Complex c); 的话
这个运算符对c的变更不会反应到c中,比如b=a+c;这里的c是不会变的,不管你的+法中对c做过什么
而后者,就算你仅仅写b=a+c;根据你的运算符定义,c的值也可能会改变。
根据情况,有时候需要这个值改变,有时候希望这个值是不变的,因此进行选择