语法范围

时间:2013-01-17 13:02:52

标签: c++ c++11

当我写这样的东西时:

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

然后编译器会在常规for中翻译for?那是for 只是一个语法糖?

1 个答案:

答案 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__rangeend-expr__range + 5for-range-declaration为{ {1}}和int elementstatement。也就是说,如果我们替换所有这些,您的...循环等同于:

for

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