ホームページ  >  記事  >  バックエンド開発  >  C の非メイン関数に渡される配列で範囲ベースの for ループを使用すると失敗するのはなぜですか?

C の非メイン関数に渡される配列で範囲ベースの for ループを使用すると失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 02:15:29986ブラウズ

Why does a range-based for-loop fail when used on an array passed to a non-main function in C  ?

非メイン関数に渡された配列の範囲ベースの For ループ

質問:

C プロジェクトで、メイン関数以外に渡された配列に対して範囲ベースの for ループを使用しようとすると、コンパイルに失敗します。このコードは、非メイン関数の範囲ベースの for ループにアクセスしようとしているときに、begin(int*&) に一致する関数呼び出しが見つからないことに関するエラーをスローします。

答え:

配列をメイン関数以外の関数に渡すと、配列はポインターに分解され、そのサイズに関する重要な情報が失われます。非メイン関数内で範囲ベースの for ループを有効にするには:

  1. 配列参照を使用: ポインターの代わりに参照によって配列を渡します。これにより、サイズ情報が保持されます。

    <code class="cpp">void foo(int (&&bar)[3]);</code>
  2. 一般的なアプローチ: 配列サイズを指定するテンプレート パラメーターを持つ関数テンプレートを使用します。このアプローチにより、さまざまな配列サイズを渡すことができます。

    <code class="cpp">template <std::size_t array_size>
    void foo(int (&&bar)[array_size]);</code>

サイズ情報を保持することにより、範囲ベースの for ループは、非配列内で配列要素を正しく反復できます。メイン関数。

以上がC の非メイン関数に渡される配列で範囲ベースの for ループを使用すると失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。