当我写这样的东西时:
int data[] = {10,44,56,78,8};
int i = 0;
for(int element : data)
...
for
然后由编译器以常规方式翻译for
?那for
只是语法糖吗?
该标准将基于范围的for
语句定义为:
{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin ) {
for-range-declaration = *__begin;
statement
}
}
在您的情况下,range-init
is (data)
,begin-expr
is __range
,end-expr
is __range + 5
,for-range-declaration
isint element
和statement
is ...
。也就是说,如果我们替换所有这些,您的for
循环相当于:
{
auto && __range = (data);
for ( auto __begin = __range,
__end = __range + 5;
__begin != __end;
++__begin ) {
int element = *__begin;
...
}
}
这种翻译是否真的由编译器完成是一个实现细节。您唯一可以保证的是您的代码将等同于上述代码。