C 11 範囲ベースのループの舞台裏
範囲ベースのループは、コレクションの要素を反復処理するための簡潔な構文を提供します。
変数の初期化
ループ変数 (この場合、x) は 1 回だけ初期化されるように見えるかもしれませんが、現実は違います。
<code class="cpp">for (const int x : vec) { cout << x << endl; }</code>
のような範囲ベースのループでは、コンパイラーは反復ごとに新しいローカル変数 x を作成します。 x を vec ベクトルの次の要素の値に初期化します。
Const 変数
const と宣言されているにもかかわらず、x 変数は反復ごとに変化するように見えることがあります。同じ変数ではないからです。新しく作成された各 x は vec の次の要素に割り当てられ、同じ変数が変更されているように見えます。
実装の詳細
範囲ベースのループが実装されています。イテレータを使用します。イテレータは、コレクションの要素へのアクセスを提供するオブジェクトです。上記のコードでは、vec には begin() 関数と end() 関数によって返されるイテレータがあります。イテレータは要素をステップ実行するために使用され、x はイテレータが指す値に割り当てられます。
補足
以上がC 11 範囲ベースのループは内部でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。