【问题标题】:What profit of universal reference usage in range based loop?在基于范围的循环中使用通用参考有什么好处?
【发布时间】:2017-07-18 21:27:59
【问题描述】:

我多次看到这样的代码:

template<typename Collection>
void Foo(Collection&& c)
{
    for (auto&& i : std::forward<Collection>(c))
    // do something with i
}

对于所有 STL 容器(vector&lt;bool&gt; 除外)i 具有左值引用类型。在这种情况下输入auto&amp;&amp; 有什么实际意义吗?

【问题讨论】:

    标签: c++ c++11 rvalue-reference


    【解决方案1】:

    正如您所说,没有左值的完美示例是std::vector&lt;bool&gt;。使用auto&amp; 将无法编译,因为从迭代器返回纯右值。

    另外,有时我也遇到过创建没有从其迭代器返回左值的范围。

    此外,使用auto&amp;&amp; 的好处是没有任何情况下它不起作用。即使你有一个奇怪的情况,你的迭代器产生一个 const rvalue 引用,auto&amp;&amp; 也会绑定到它。

    对于教学,也更容易说“在你的 for 循环中使用 auto&amp;&amp;”。因为它不会导致到处复制和工作。

    那里还有一个建议允许隐式auto&amp;&amp;并启用语法for (x : range)(我不记得是哪个。如果你知道,请在cmets中告诉我)

    【讨论】:

    • 简洁的for循环,如果没记错的话。
    • 该提案崩溃并被烧毁。我认为提及它没有多大意义。
    猜你喜欢
    • 2012-10-19
    • 2015-01-15
    • 2021-01-21
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多