Почему он трансформируется в
blockquote>int
один раз внутри тела функции?Это не так; это все еще ссылка на rvalue .
Когда в выражении появляется выражение, это lvalue - даже если это будет ссылка на rvalue . Он может быть преобразован в rvalue , если выражение требует, чтобы (то есть, если его значение необходимо); но он не может быть связан с ссылкой rvalue .
Итак, как вы говорите, чтобы связать его с другой ссылкой rvalue , у вас есть чтобы явно преобразовать его в неназванный rvalue .
std::forward
иstd::move
- это удобные способы сделать это.Кроме того, почему бы не
blockquote>std::move
?Почему бы и нет? Это будет иметь больше смысла, чем
std::forward
, который предназначен для шаблонов, которые не знают, является ли аргумент ссылкой.