Я всегда читал, что std::forward
предназначен только для использования с параметрами шаблона. Однако я спрашивал себя, почему. См. Следующий пример:Использование std :: forward vs std :: move
void ImageView::setImage(const Image& image){
_image = image;
}
void ImageView::setImage(Image&& image){
_image = std::move(image);
}
Это две функции, которые в основном делают то же самое; один берет ссылку на l-значение, а другой - r-значение. Теперь я думал, что, поскольку std::forward
должен возвращать ссылку на l-значение, если аргумент является ссылкой на l-значение и ссылкой на r-значение, если аргумент равен единице, этот код можно было бы упростить примерно так:
void ImageView::setImage(Image&& image){
_image = std::forward(image);
}
Какой тип похож на пример cplusplus.com упоминает для std::forward
(только без параметров шаблона). Я просто хотел бы знать, если это правильно или нет, и если не почему.
Я также спрашивал себя, что именно будет разница в
void ImageView::setImage(Image& image){
_image = std::forward(image);
}
Чтобы это понять, посмотрите это видео: http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11 –
Проблема: переслать _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Фактически, он полностью игнорирует значение-категорию параметра. –