如果您阅读的代码如下
auto&& var = foo();
where foo是按类型值返回的任何函数T.然后var是左值类型的左值引用T.但这意味着var什么呢?这是不是意味着,我们被允许窃取资源var?是否有任何合理的情况,您应该使用auto&&告诉读者您的代码与您在返回时unique_ptr<>告诉您拥有独占所有权时的行为?例如什么T&&时候T类型?
我只是想了解,如果有任何其他用例auto&&比模板编程中的用例; 喜欢这篇文章中的例子中所讨论的那些通用参考斯科特迈尔斯.
阿基于范围的for声明在§6.5.4定义为等同于:
{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin ) {
for-range-declaration = *__begin;
statement
}
}
Run Code Online (Sandbox Code Playgroud)
其中range-init定义了两种基于范围的形式for:
for ( for-range-declaration : expression ) => ( expression )
for ( for-range-declaration : braced-init-list ) => braced-init-list
Run Code Online (Sandbox Code Playgroud)
(该条款进一步规定了其他子表达式的含义)
为什么__range给出推导类型auto&&?我的理解auto&&是,通过传递它来保留表达式的原始值(左值/右值)是有用的std::forward.但是,__range不会通过任何地方std::forward.它得到的范围内时迭代器作为一个人的只用__range,__range.begin()或begin(__range).
使用"通用参考"有auto&&什么好处?还auto&不够吗? …