Мы работаем с 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) сопзЬ;
принять два аргумента поплавка внутри? или я думаю об этом не так?
Спасибо,
E: Благодаря Matt и Джерри для утверждая, что я думал, что мне нужно делать с оператором двойного поплавка.
Я не понимаю, каков ваш точный вопрос, можете ли вы опубликовать фрагмент кода, в котором создано слишком много временных времен и требуется исправление? –
(N) RVO является исключением из правила as-if, которое обычно определяет разрешенные оптимизаторы компилятора. Кажется, вы пытаетесь освободить компилятор от (большей части тяжелой работы), чтобы использовать это правило. – Deduplicator
Строка 'Vect2D ((this-> x - tmp.x), (this-> y - tmp.y));' пытается создать 'Vect2D', используя конструктор с двумя аргументами. Ваше сообщение об ошибке указывает, что такого конструктора нет, поэтому, возможно, вы должны добавить его! –