【发布时间】:2015-05-03 21:20:19
【问题描述】:
我总是读到std::forward 仅用于模板参数。然而,我在问自己为什么。请参阅以下示例:
void ImageView::setImage(const Image& image){
_image = image;
}
void ImageView::setImage(Image&& image){
_image = std::move(image);
}
这是两个基本相同的功能;一个采用左值引用,另一个采用右值引用。现在,我想既然std::forward 应该在参数是左值引用时返回左值引用,如果参数是 1 时返回右值引用,这段代码可以简化为:
void ImageView::setImage(Image&& image){
_image = std::forward(image);
}
这有点类似于 cplusplus.com 提到的 std::forward 示例(只是没有任何模板参数)。我只是想知道,这是否正确,如果不正确,为什么。
我也在问自己到底有什么不同
void ImageView::setImage(Image& image){
_image = std::forward(image);
}
【问题讨论】:
-
要真正了解,请观看此视频:channel9.msdn.com/Shows/Going+Deep/…
-
问题:Forward not 根据其参数返回左值引用或右值引用。实际上,它完全忽略了参数的值类别。
-
当它不是模板参数时,&& 表示右值(而不是转发引用),因此遵循binding rules (see the table here) 这意味着对
Image的左值引用不能绑定到@987654331 @.