我一直在阅读,在执行重载运算符函数时,最好通过引用传递,通常是出于性能原因。但是我注意到,当我按值传递对象时,它仍然具有相同的效果。不应该按值传递它不影响操作员吗?我知道如果你有两个 int 变量并且你想通过将它们传递给另一个函数来交换它们,那么它只有在你通过引用传递(或者如果你传递一个指针)时才有效。如果您只是传递值,则变量最后保持不变。那么不应该同样适用于传递类对象吗?
例子:
Person Person::operator+(Person obj1){
Person sum;
sum.age = this->age + obj1.age;
return sum;
}
如果我有一个主要的并且做:
Person person1(14);
Person person2(182);
Person3 = person1 + person2;
std::cout << person3.age << std::endl;
它和我做的一样
Person Person::operator+(Person &obj1){
Person sum;
sum.age = this->age + obj1.age;
return sum;
}
所以我有点像我提到的交换方法那样思考这个问题。如果我将值传递给交换函数,它不会改变变量的原始值。我在想,如果我只是传递对象而不是引用,它实际上不会改变运算符的重载。现在我在想,因为在我的 Person 类中,运算符和变量都定义在同一个类中,所以同样的不适用,这就是为什么它实际上会重载运算符?