Перегрузка оператора двоичной арифметики в C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Перегрузка оператора двоичной арифметики в C++

Сообщение Anonymous »

Я прочитал страницу cppreference, посвященную перегрузке операторов — «операторы двоичной арифметики». Меня смутил комментарий в фрагменте кода, который поощрял передачу по значению, а не по ссылке, для оптимизации компилятора. У меня нет опыта, поэтому я мог пропустить некоторую информацию, но, насколько мне известно, передача по ссылке рекомендуется, когда это возможно, а не по значению.
Первый пример:

Код: Выделить всё

class A {
public:
A& operator+=(A const& rhs) {
/*...*/
return *this;
}

friend A operator+(A lhs, A const& rhs) {
lhs += rhs;
return lhs;
}
};
В этом коде указано, что передача lhs по значению в операторе+ помогает оптимизировать цепное сложение. Насколько я понимаю, это противоречит этому ответу на SO, в котором говорится, что передача по значению предотвращает «оптимизацию именованного возвращаемого значения».
Второй пример:

Код: Выделить всё

inline A operator+(A const& lhs, X const& rhs) {
A a = lhs;
a += rhs;
return a;
}
Во втором примере указано A a = lhs;, что, как поясняется принятым ответом в этой теме, утверждает, что оптимизация первого примера верна, если оператор+ реализован с использованием оператора+=.
Правильна ли оптимизация первого примера, если оператор+ реализован без оператора+=?< /p>
Какая из этих реализаций предпочтительнее с точки зрения вычислительной эффективности, при условии, что второй пример включает «оптимизацию именованного возвращаемого значения»?
Есть ли другая причина предпочитаете одно другому?

Подробнее здесь: https://stackoverflow.com/questions/785 ... verloading
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»