При программировании на С++ 03 мы не можем передать неназванный временный T()
в функцию void foo(T&);
. Обычное решение - дать временное имя, а затем передать его как:
T v;
foo(v);
Теперь, когда идет С++ 0x - и теперь с ссылками rvalue, функция, определенная как void foo(T&&)
, позволит мне передать временную. Это подводит меня к моему вопросу: поскольку функция, которая принимает ссылку rvalue, может принимать как ссылки rvalue (неназванные временные), так и ссылки lvalue (называемые неконстантными ссылками), есть ли какая-либо причина больше использовать ссылки lvalue в параметрах функции? Разве мы не должны всегда использовать rvalues в качестве параметров функции?
Конечно, функция, которая принимает ссылку lvalue, не позволит вызывающему пользователю пройти временную, но я не уверен, что это полезное ограничение.