为什么一个人永远不会使用auto &&作为局部变量?

Ast*_*isk 19 c++ perfect-forwarding auto c++11 c++14

虽然T&&与模板一起使用作为转发参考通用引用(如Scott Meyers所称),但我auto&&在代码示例中看到了一些博客.我认为auto自己应该足够了,然而,CbCon 2014中的 Herb Sutter :永远不要auto&&用于局部变量

这是为什么?

看到所有回复,我觉得我应该问对方.尽管有一般编码指南,但是在函数体内使用auto &&以获得代码正确性和可维护性是有任何好的用例.

sp2*_*nny 6

在某些情况下,当您需要auto&&本地人时,请考虑:

vector<bool> vb { true, false, true };
for( auto&& b : vb )
    b = !b;
Run Code Online (Sandbox Code Playgroud)

在这里,aauto&不行。(如果vector<bool>是专门的)

然而,与类型推导(即转发引用)一起使用的通常原因&&是因为您不知道或不关心确切的类型,您只是要转发它。

“通用引用”一词有点误导,您不应该普遍使用它,因此它的名称更改为“转发引用”

请注意,&&不与类型推导一起使用的是右值引用,这是完全不同的事情。