非メイン関数に渡された配列の範囲ベースの For ループ
質問:
C プロジェクトで、メイン関数以外に渡された配列に対して範囲ベースの for ループを使用しようとすると、コンパイルに失敗します。このコードは、非メイン関数の範囲ベースの for ループにアクセスしようとしているときに、begin(int*&) に一致する関数呼び出しが見つからないことに関するエラーをスローします。
答え:
配列をメイン関数以外の関数に渡すと、配列はポインターに分解され、そのサイズに関する重要な情報が失われます。非メイン関数内で範囲ベースの for ループを有効にするには:
配列参照を使用: ポインターの代わりに参照によって配列を渡します。これにより、サイズ情報が保持されます。
<code class="cpp">void foo(int (&&bar)[3]);</code>
一般的なアプローチ: 配列サイズを指定するテンプレート パラメーターを持つ関数テンプレートを使用します。このアプローチにより、さまざまな配列サイズを渡すことができます。
<code class="cpp">template <std::size_t array_size> void foo(int (&&bar)[array_size]);</code>
サイズ情報を保持することにより、範囲ベースの for ループは、非配列内で配列要素を正しく反復できます。メイン関数。
以上がC の非メイン関数に渡される配列で範囲ベースの for ループを使用すると失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。