Какой способ более эффективно перегрузить оператора и почему? - PullRequest
0 голосов
/ 26 февраля 2020

Какой способ эффективнее? Есть ли разница -> 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;
}

Ответы [ 2 ]

6 голосов
/ 26 февраля 2020

Начните с того, что не принимайте сложные типы в качестве аргументов по значению, если вы заботитесь об эффективности.

vect& operator+=(vect const& right)
{
    x += right.x;
    y += right.y;
    return *this;
}

this->x и просто x означают одно и то же. Они не влияют на время выполнения вообще. И наконец, верните vect&, потому что это идиоматизм c.

3 голосов
/ 26 февраля 2020

Версии 1 и 2 делают одно и то же, без разницы. Версия 3 позволяет писать

vecA += vecB += vecC += vecD;

Нет различий в производительности, оператор возвращает ссылку на себя, а не на новый объект.

...