当我写这样的东西时:
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-initis (data),begin-expris __range,end-expris __range + 5,for-range-declarationisint element和statementis ...。也就是说,如果我们替换所有这些,您的for循环相当于:
{
auto && __range = (data);
for ( auto __begin = __range,
__end = __range + 5;
__begin != __end;
++__begin ) {
int element = *__begin;
...
}
}
这种翻译是否真的由编译器完成是一个实现细节。您唯一可以保证的是您的代码将等同于上述代码。