【发布时间】:2018-10-28 02:54:41
【问题描述】:
我在两次通过引用传递同一个对象到一个函数时遇到了一个问题,一次作为常量,一次像往常一样(可变)。
我想知道修复此类代码的最佳方法是什么。 (一个方便的例子是重载复合赋值运算符)。
class MyClass
{
int a, b;
public:
MyClass(int a, int b) : a(a), b(b) {}
MyClass& operator+=(const MyClass& ob)
{
this->a += ob.b;
this->b += ob.a;
return *this;
}
};
当然,这段代码没有多大意义,但它突出了问题: 编写如下代码时:
MyClass ob(1, 2);
ob += ob;
我希望 ob.b 的值为 3,但它的值为 5。
我想知道如何正确地实现这样的代码。 我应该小心实施,例如维护临时变量,还是有更好的通用解决方案来解决这些问题? (例如按值传递)
【问题讨论】:
-
假设该类有一个工作/正常的复制构造函数,按值传递将解决问题,因为该函数接收右手操作数的副本。然而,更一般地说,如果你有一个类的加法是这样的,你的类的用户可能很难掌握。
标签: c++ operator-overloading parameter-passing