Скажем, у меня есть вектор класс следующим образом:Использует оператор + в операторе + = медленнее, чем не использовать его?
struct Vector
{
int x, y;
Vector operator+(Vector rhs)
{
return Vector(x + rhs.x, y + rhs.y);
}
}
И я хочу, чтобы добавить operator+=
. У меня есть два варианта:
Это:
Vector& operator+=(Vector rhs)
{
*this = *this + rhs;
return *this;
}
Или это:
Vector& operator+=(Vector rhs)
{
x += rhs.x;
y += rhs.y;
return *this;
}
Применяя это ко всем другим operator_=
с использованием соответствующих математических операторов и операторов присваивания и operator!=
с помощью operator==
, будет существует ли какая-либо реалистичная деградация производительности из-за дополнительных вызовов оператора, предполагая, что эти операторы используются чрезвычайно часто?
По крайней мере, вы возвращаете новый вектор от оператора +, который медленнее, чем просто возвращает ссылку уже существующая структура. –
В вашем конкретном случае любой компилятор может оптимизировать операции над двумя 'int', чтобы удалить любую разницу. –