for range based loop 等价为
{
auto && __range = range-expression ;
for (auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin)
{
range-declaration = *__begin;
loop-statement
}
}
具体例子:(特意取range-declaration 为引用类型)
vector<int> res(2, 0);
for (int &r : res) {
...
}
// 等价为
{
auto && __range = res; // __range 是vector<int> &类型
for (auto __begin =__range.begin() , __end = __range.end(); __begin != __end; ++__begin)
{
int& r = *__begin; // range-declaration可以声明为引用类型
...
}
}