我有一个关于为解决C ++ 11 lambdas中的移动捕获而提出的解决方法的问题。特别是,以Meyer's book:
为例std::vector<double> data;
...
auto func = std::bind( [](const std::vector<double>& data)
{ /*uses of data*/ },
std::move(data)
);
我的问题是:声明参数&#34;数据&#34;的后果/意义是什么?作为右值参考?:
auto func = std::bind( [](std::vector<double>&& data)
...
为了帮助您指导答案,我将提出三项索赔。请告诉我,我是对还是错:
提前致谢。
答案 0 :(得分:6)
声明参数的后果/意义是什么? &#34;
data
&#34;作为右值参考?
它不会编译(至少如果你试图实际调用func
)。 std::bind
总是将绑定参数作为左值传递,它不会绑定到右值参考。
移动时在这两种情况下,在定义&#34; func&#34;之后使用数据是不安全的。
data
处于有效但未指定的状态。您可以像使用内容未知的矢量一样使用它。