新しい範囲ベースの for ループは読みやすさを向上させ、非常に使いやすくなっています。ただし、次の点を考慮してください。
map<Foo,Bar> FooAndAssociatedBars;
for (auto& FooAndAssociatedBar : FooAndAssociatedBars) {
FooAndAssociatedBar.first.doSth();
FooAndAssociatedBar.second.doSomeOtherThing();
}
詳細かもしれませんが、次のようなことができればもっと読みやすいと思います。
for ( (auto& foo, auto& bar) : FooAndAssociatedBars) {
foo.doSth();
bar.doSomeOtherThing();
}
同等の構文を知っていますか?
編集: 朗報: C++17 には、構造化バインディングと呼ばれるこの問題に対処する提案があります ( 1を参照)。C++17 では、次のように記述できるはずです。
tuple<T1,T2,T3> f(/*...*/) {
/*...*/
return {a,b,c};
}
auto [x,y,z] = f(); // x has type T1, y has type T2, z has type T3
この可読性の問題を解決する