天天看點

C11新特性:2.range-based for loop

c11中提供一種新的for循環

for(auto item : collection){
    statement;
}
           

該語句等價于:

for(auto index = collection.begin();index != collection.end();index++){
    item = *index;
    statement;
}
           

如果collection沒有begin或者end成員函數,則等價于:

for(auto index = begin(collection); index != end(collection); index++){
    item = *index;
    statement;
}
           

對于std::initializer_list<>,該loop也适用,因為其有begin()以及end()成員。

即:

for(auto item : {,,,}){
        std::cout<<item<<std::endl;
}
           

另外,對于傳統的c風格數組,該for loop 同樣适用:

int array[] = {,,,,};
int sum = ;
for(int item : array){
    sum += item;
}
           

最後,溫馨提示:注意隐式轉換問題(explicit)。

繼續閱讀