Итак, у меня есть конструктор, который принимает vector<num>&
, и они std::move
по этой ссылке. Разве это объективно не лучше, чем взять vector<num>
, если я собираюсь переместить аргумент?
Во втором случае, как я понимаю, гарантируется, что никакие копии не будут случайно созданы при прохождении c конструктору.
В первом случае, может быть, компилятор может оптимизировать копию с ходом, а может и нет, или, возможно, пользователь выполнит foo(std::move(my_vec));
, а может и нет ... в общем, нет гарантии, что он будет перемещен.
Я понимаю, что если я буду использовать ссылку l-value
, я не смогу принять временные ссылки. Есть ли другие недостатки?