Я наткнулся на статью http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
Совет автора:
Не копируйте аргументы вашей функции. Вместо этого передайте их по значению и позвольте компилятору сделать копирование.
Однако я не совсем понимаю, какие преимущества получаются в двух примерах, представленных в статье:
//Don't
T& T::operator=(T const& x) // x is a reference to the source
{
T tmp(x); // copy construction of tmp does the hard work
swap(*this, tmp); // trade our resources for tmp's
return *this; // our (old) resources get destroyed with tmp
}
vs
// DO
T& operator=(T x) // x is a copy of the source; hard work already done
{
swap(*this, x); // trade our resources for x's
return *this; // our (old) resources get destroyed with x
}
В обоих случаях создается одна дополнительная переменная, так в чем преимущества? Единственное преимущество, которое я вижу, это если временный объект передается во второй пример.
obj = T();
илиobj = foo();
, гдеfoo()
возвращаетT
. - person juanchopanza   schedule 16.09.2013