私がこのようなものを書くとき:
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
is int element
、statement
is です...
。つまり、これらすべてを置き換えると、for
ループは次のようになります。
{
auto && __range = (data);
for ( auto __begin = __range,
__end = __range + 5;
__begin != __end;
++__begin ) {
int element = *__begin;
...
}
}
この変換が実際にコンパイラによって行われるかどうかは、実装の詳細です。保証できる唯一のことは、コードが上記のコードと同等であることです。