Операторы RVO с несколькими возвратами
Мы работаем с RVO в классе, чтобы показать, как мы можем уменьшить количество созданных временных.
Я понял основы этого, но мне трудно понять, как объединить несколько значений для возврата в одну строку.
Для одноразовой оптимизации я смог понять это довольно легко
const A operator + ( const A &tmp)
{
A sum;
sum = this->x + tmp.x;
return sum;
}
может быть уменьшен до:
const A operator + ( const A &tmp)
{
return A(this->x + tmp.x);
}
Однако я не уверен, как применить это к функции с несколькими значениями для возврата. Например:
Vect2D operator - ( const Vect2D &tmp ) const;
Vect2D Vect2D::operator - ( const Vect2D &tmp ) const
{
Vect2D sum;
sum.x = this->x - tmp.x;
sum.y = this->y - tmp.y;
return ( sum );
};
Мой процесс за этим будет:
Vect2D Vect2D::operator - ( const Vect2D &tmp ) const
{
return Vect2D((this->x - tmp.x), (this->y - tmp.y));
};
который возвращается с сообщением об ошибке "no argument takes the value (float, float)
".
я должен был бы реорганизовать начальный
Оператор Vect2D - ( const Vect2D &tmp) const;
взять два аргумента с плавающей точкой внутри? или я думаю об этом не так?
Спасибо,
E: Спасибо Мэтту и Джерри за подтверждение того, что я думал, что мне нужно сделать с оператором двойного плавания.
1 ответ
Решением моей проблемы было не понимание того, что операторам требуется функция Friend, чтобы иметь два аргумента. Несмотря на то, что решение не полностью RVO, оно уменьшает количество временных значений, создаваемых возвращением с обеими переменными.
Еще раз спасибо Мэтту и Джерри за то, что я начал процесс.