Я предположил, что каноническая форма для оператора +, предполагая существование перегруженного оператора + = функции члена, было так:Какая лучшая подпись для перегруженных арифметических операторов в C++?
const T operator+(const T& lhs, const T& rhs)
{
return T(lhs) +=rhs;
}
Но это было указано мне, что это будет работать:
const T operator+ (T lhs, const T& rhs)
{
return lhs+=rhs;
}
По существу, эта форма передает создание временного из тела реализации в вызов функции.
Кажется немного неудобным иметь разные типы для двух параметров, но есть ли что-то неправильное со второй формой? Есть ли причина предпочитать одну над другой?
Так же делает вторую форму. – 2008-09-23 01:42:13
Не обязательно. Большинство современных компиляторов обнаруживают, что требуется только одна копия и оптимизировать ее. – 2008-09-23 01:42:14
(Вышеуказанное предназначено для @Kris, но на самом деле оно применимо и к @Corey.) – 2008-09-23 01:42:49