Какой способ эффективнее? Есть ли разница -> X или просто X? Я думаю, что это void версия компилятора bcs не нужно вызывать contructor или что-то, просто добавьте.
void operator+=(vect right) { this->x += right.x; this->y += right.y; } void operator+=(vect right) { x += right.x; y += right.y; } vect& operator+=(vect right) { x += right.x; y += right.y; return *this; }
Начните с того, что не принимайте сложные типы в качестве аргументов по значению, если вы заботитесь об эффективности.
vect& operator+=(vect const& right) { x += right.x; y += right.y; return *this; }
this->x и просто x означают одно и то же. Они не влияют на время выполнения вообще. И наконец, верните vect&, потому что это идиоматизм c.
this->x
x
vect&
Версии 1 и 2 делают одно и то же, без разницы. Версия 3 позволяет писать
vecA += vecB += vecC += vecD;
Нет различий в производительности, оператор возвращает ссылку на себя, а не на новый объект.