Шаблон std::forward
обычно предназначен для зависимых типов. Пожалуйста, внимательно прочитайте этот вопрос , чтобы увидеть, применим ли он здесь. Это сложный предмет для освоения, поэтому не стесняйтесь обновлять свой вопрос соответствующими сведениями о вашей конкретной проблеме (использование rvalue-ссылок для целых чисел не очень интересно ...).
Я полагаю, что ваш вопрос касается понимания основных свойств rvalue ссылок. Эмпирическое правило, которое нужно запомнить:
- все, что имеет имя, является lvalue (постоянным или нет).
- все, что не имеет имени, является значением.
- Типы с
&&
привязываются к значениям.
Если у вас есть функция ...
void foo(SomeClass&& x)
{
// ... then here x has type SomeClass& !
}
затем внутри тела, x
- это имя, и, следовательно, значение l . Это действительно имеет тип SomeClass&
. Вы должны использовать std::move
, чтобы превратить SomeClass&
в SomeClass&&
:
void bar(SomeClass&& x)
{
// Since `x` has a name here, it is a Lvalue.
// Therefore it has type SomeClass&, what the signature doesn't indicate.
// We thus have to explicitly turn it into a rvalue:
foo(std::move(x));
}