Я недавно прочитал (и, к сожалению, забыл, где), что лучший способ написать оператор = такой:
foo &operator=(foo other)
{
swap(*this, other);
return *this;
}
вместо этого:
foo &operator=(const foo &other)
{
foo copy(other);
swap(*this, copy);
return *this;
}
Идея состоит в том, что если оператор = вызывается со значением r, первая версия может оптимизировать создание копии. Таким образом, при вызове с использованием значения r, первая версия быстрее, а при вызове с использованием значения l они эквивалентны.
Мне интересно, что другие люди думают об этом? Будут ли люди избегать первой версии из-за отсутствия ясности? Я прав, что первая версия может быть лучше и никогда не может быть хуже?