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