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

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

Linda Hamilton
リリース: 2024-10-25 02:15:29
オリジナル
1083 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート