相关疑难解决方法(0)

auto &&告诉我们什么?

如果您阅读的代码如下

auto&& var = foo();

where foo是按类型值返回的任何函数T.然后var是左值类型的左值引用T.但这意味着var什么呢?这是不是意味着,我们被允许窃取资源var?是否有任何合理的情况,您应该使用auto&&告诉读者您的代码与您在返回时unique_ptr<>告诉您拥有独占所有权时的行为?例如什么T&&时候T类型?

我只是想了解,如果有任何其他用例auto&&比模板编程中的用例; 喜欢这篇文章中的例子中所讨论的那些通用参考斯科特迈尔斯.

c++ auto c++11 forwarding-reference

153
推荐指数
2
解决办法
4万
查看次数

为什么基于范围的for语句通过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&不够吗? …

c++ for-loop auto c++11 universal-reference

15
推荐指数
1
解决办法
3339
查看次数