1

当我写这样的东西时:

int data[] = {10,44,56,78,8};      
int i = 0;
for(int element : data)
   ...

for然后由编译器以常规方式翻译for?那for 只是语法糖吗?

4

1 回答 1

7

该标准将基于范围的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 __rangeend-expris __range + 5for-range-declarationisint elementstatementis ...。也就是说,如果我们替换所有这些,您的for循环相当于:

{
  auto && __range = (data);
  for ( auto __begin = __range,
             __end = __range + 5;
        __begin != __end;
        ++__begin ) {
    int element = *__begin;
    ...
  }
}

这种翻译是否真的由编译器完成是一个实现细节。您唯一可以保证的是您的代码将等同于上述代码。

于 2013-01-17T13:09:16.883 回答