私が見ることができる唯一の利点は、シーケンス反復子がプロキシ参照を返し、その参照を非定数の方法で操作する必要がある場合です。たとえば、次のように考えてください。
#include <vector>
int main()
{
std::vector<bool> v(10);
for (auto& e : v)
e = true;
}
vector<bool>::reference
から返された右辺値iterator
が非 const 左辺値参照にバインドされないため、これはコンパイルされません。しかし、これはうまくいきます:
#include <vector>
int main()
{
std::vector<bool> v(10);
for (auto&& e : v)
e = true;
}
そうは言っても、そのようなユースケースを満たす必要があることがわかっていない限り、この方法でコーディングすることはありません。つまり、あなたが何をしているのだろうと人々に疑問を抱かせるので、私はこれを不当に行うつもりはありません。そして、私がそうした場合、その理由についてコメントを含めても問題ありません。
#include <vector>
int main()
{
std::vector<bool> v(10);
// using auto&& so that I can handle the rvalue reference
// returned for the vector<bool> case
for (auto&& e : v)
e = true;
}
編集
私のこの最後のケースは、意味をなすためのテンプレートになるはずです。ループが常にプロキシ参照を処理していることがわかっている場合はauto
、auto&&
. しかし、ループが時々非プロキシ参照を処理し、時にはプロキシ参照を処理していたとき、私auto&&
は選択の解決策になると思います.