天天看点

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)。

继续阅读