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