Я столкнулся с проблемой при передаче одного и того же объекта дважды по ссылке на функцию, один раз как константа и один раз как обычно (изменяемый).
Я хотел бы знать, каков наилучший способисправить такой код.(Удобный пример - перегрузка составных операторов присваивания).
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.
Интересно, как правильно реализовать такой код в целом.Должен ли я просто быть осторожным с реализацией, например, поддерживая временные переменные, или есть какое-нибудь лучшее общее решение для таких проблем?(Например, передать по значению)