新的基於範圍的for循環確實提高了可讀性,並且非常易於使用。然而,考慮以下因素:C++ 11基於範圍的for和map:可讀性
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
解決了這個問題,可讀性
編譯器會如何猜測'Foo'和'Bar'是指什麼? – 2013-03-20 14:50:20
@PeteBecker嗯,foo只是一個方便的方式來說「名字foo std :: pair的左邊部分」。絕對而言,可以在編譯時做到這一點:這只是一個符號方便。我想知道是否有可能通過重載或類似的方式獲得這樣的效果 – 2013-03-20 15:05:24
是的,當然可以要求編譯器知道'std :: pair'或查找任何具有名爲'first'和'秒';這很專業,可能不適合標準化。下一個請求將是'元組'的所有元素... – 2013-03-20 15:15:45