Я думаю, что есть что-то, что я не совсем понимаю о ссылках на rvalue. Почему следующие команды не скомпилируются (VS2012) с ошибкой 'foo' : cannot convert parameter 1 from 'int' to 'int &&'
?
void foo(int &&) {}
void bar(int &&x) { foo(x); };
Я бы предположил, что тип int &&
будет сохранен при передаче из bar в foo. Почему он преобразуется в int
один раз внутри тела функции?
Я знаю, что ответ заключается в использовании std::forward
:
void bar(int &&x) { foo(std::forward<int>(x)); }
так что, возможно, я просто не понимаю, почему. (Кроме того, почему бы не std::move
?)