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