2014-10-30 2 views
0

Мы работаем с 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 и Джерри для утверждая, что я думал, что мне нужно делать с оператором двойного поплавка.

+0

Я не понимаю, каков ваш точный вопрос, можете ли вы опубликовать фрагмент кода, в котором создано слишком много временных времен и требуется исправление? –

+0

(N) RVO является исключением из правила as-if, которое обычно определяет разрешенные оптимизаторы компилятора. Кажется, вы пытаетесь освободить компилятор от (большей части тяжелой работы), чтобы использовать это правило. – Deduplicator

+0

Строка 'Vect2D ((this-> x - tmp.x), (this-> y - tmp.y));' пытается создать 'Vect2D', используя конструктор с двумя аргументами. Ваше сообщение об ошибке указывает, что такого конструктора нет, поэтому, возможно, вы должны добавить его! –

ответ

0

Решение моей проблемы не понимало, что операторы требуют функции Friend, чтобы иметь два аргумента. Хотя это не совсем RVO, решение уменьшает количество темпов, созданных путем возврата с двумя переменными в нем.

Еще раз спасибо Мэтту и Джерри за то, что вы начали заниматься этим процессом.

Смежные вопросы