Я не могу этого сделать:
int &&q = 7;
int &&r = q;
//Error Message:
//cannot convert from 'int' to 'int &&'
//You cannot bind an lvalue to an rvalue reference
Если я правильно понял, при инициализации ссылки на rvalue, временная переменная также была инициализирована. Итак, int &&q = 7;
может рассматриваться как:
int temp = 7;
int &&q = temp;
И при использовании ссылки с правой стороны, я фактически использую рефери. Итак, int &&r = q;
может рассматриваться как:
int &&r = temp; //bind an lvalue to an rvalue reference, cause error, understandable
Итак, как я понимаю, возникает ошибка компилятора.
Почему добавление std::forward
может решить это?
int &&q = 7;
int &&r = std::forward<int>(q);
Я знаю, что std::forward
всегда возвращает ссылку rvalue, как ссылка, возвращаемая std::forward
отличается от int&&q
?