Я предполагал, что каноническая форма для оператора +, предполагая существование перегруженного оператора + = функция-член, была такой:
const T operator+(const T& lhs, const T& rhs)
{
return T(lhs) +=rhs;
}
Но мне было указано, что это также будет работать:
const T operator+ (T lhs, const T& rhs)
{
return lhs+=rhs;
}
По сути, эта форма переносит создание временного объекта из тела реализации в вызов функции.
Кажется немного неловким иметь разные типы для двух параметров, но есть ли что-то не так со второй формой? Есть ли причина отдавать предпочтение одному другому?