clang已开始实现简洁的基于范围的for循环,源自n3994。通常在引入基于范围的for循环时,我们看到的代码形式为
for (auto & v : vector)
以避免不必要的复制。似乎n3994提出for (auto && v : vector)
在各个方面都更加优越。我有几个问题:
- 后一种形式相对前一种形式有哪些优势?如果后者明显更有优势,为什么我们通常选择
auto &
而不是auto &&
? - 使新的基于范围的for循环等同于
auto &&
会破坏现有代码吗?它会对新代码产生实际影响吗? - 这难道不会向初学者介绍一个陷阱,让他们的代码实际上等同于
auto &&
?