【问题标题】:Applications of const&& in range-for?const&& 在 range-for 中的应用?
【发布时间】:2016-05-04 22:34:35
【问题描述】:

是否存在在 range-for 循环中使用 const&& 确实有意义的情况?

for (const auto && x : c) // ?

【问题讨论】:

  • 在任何情况下const && 是有意义的任何地方
  • @immibis 我知道one
  • 我对 range-for 的特定上下文很感兴趣。我看到const auto &&this code 的范围内使用,对此感到好奇。而不是for (const auto && it : dl),我只会使用for (const auto & ...),用于观察项。

标签: c++ c++11 for-loop constants rvalue-reference


【解决方案1】:

简答:const auto&&range-for loops(或其他)中没有用处

如果您希望以优化的方式移动对象,您可以使用rvalue references。除非您可以修改从中移动的对象,否则您不能这样做(通常)。所以const rvalues (*) 没有实际用处(你不能离开它们,因为你不能修改它们)。

range-for loops 在关于const auto&& 的讨论中不要提出任何问题。


例如查看此 SO 帖子:Do rvalue references to const have any use?

const rvalue 引用的唯一用途是删除一些函数重载。这不适用于range-for loops


(*) 顺便说一下,const auto&& 是 const 右值引用,而不是转发引用。

【讨论】:

  • 好吧,你可以保证防止元素被修改——但如果需要,简单的 const 引用会更简单。
  • @SergeyA 您使用右值引用的唯一原因是您希望有效地摆脱它们。
  • 您的回答似乎证实了我的想法,即在 range-for 循环中没有有效使用 const auto &&。我将其标记为答案,除非在另一个答案中出现了一些新的有趣想法。
  • 你能解释一下,为什么这不是转发/通用参考?
  • @MikeMB 因为只有T&& 推导出T(或auto&&)是一个转发参考。见isocpp.org/blog/2012/11/…