小编Ser*_*ger的帖子

使用std :: forward与auto &&是正确的事情

试图了解是否使用std::forwardauto&&变量是通过这些变量,允许移动的正确途径.

假设有一个功能:

void moveWidget(Widget&& w);
Run Code Online (Sandbox Code Playgroud)

和调用者 - 两个变量来引用rvalue和lvalue:

Widget w;
auto&& uniRefLV = w;            // lvalue initialiser, 
                                // uniRefLV's type is Widget&

auto&& uniRefRV = std::move(w); // rvalue initialiser, 
                                // uniRefRV's type is Widget&&
Run Code Online (Sandbox Code Playgroud)

我们知道类型的变量auto&&通用引用,因为存在类型推导.这意味着双方uniRefRVuniRefLV普遍引用.

在我的例子中,显然uniRefRVrvalue并且uniRefLV左值,但从概念上讲它们都是通用引用,如果定义不同,它们可以表示rvaluelvalue.

现在,我想调用moveWidget()并完善这些通用引用类型.该指南(由Scott Meyers撰写)说:

传递和返回右值引用通过std::move,普遍引用通过std::forward.

除非我完全误解了指南,否则使用起来似乎合乎逻辑std::forward.但是让我们考虑所有可能的选择: …

c++ c++11

8
推荐指数
2
解决办法
1136
查看次数

标签 统计

c++ ×1

c++11 ×1