Новые циклы, основанные на диапазонах, действительно улучшают читаемость и очень просты в использовании. Однако учтите следующее:
map<Foo,Bar> FooAndAssociatedBars;
for (auto& FooAndAssociatedBar : FooAndAssociatedBars) {
FooAndAssociatedBar.first.doSth();
FooAndAssociatedBar.second.doSomeOtherThing();
}
Это может быть деталь, но я считаю, что было бы более читаемо, если бы я мог сделать что-то вроде:
for ( (auto& foo, auto& bar) : FooAndAssociatedBars) {
foo.doSth();
bar.doSomeOtherThing();
}
Знаете ли вы эквивалентный синтаксис?
EDIT: Хорошая новость: на С++ 17 есть предложение, которое ссылается на эту проблему, называемое структурированными привязками (см. 1). В С++ 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
который решает эту проблему читаемости