ホームページ >バックエンド開発 >C++ >メンバー初期化子リストで配列メンバーを初期化するにはどうすればよいですか?

メンバー初期化子リストで配列メンバーを初期化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 02:07:08521ブラウズ

How to Initialize an Array Member in a Member Initializer List?

メンバー初期化子リストで配列メンバーを初期化する方法

概要

メンバー初期化子リスト内の配列メンバーの作成は簡単なタスクのように思えるかもしれませんが、実際には難しい場合があります。この記事では、さまざまなアプローチを検討し、このトピックに関連する一般的な質問に答えます。

問題とコード

次のコード スニペットは、コンストラクターの初期化子で配列メンバーを初期化しようとします。 list:

class C {
public:
    C() : arr({1,2,3}) //doesn't compile
{}
private:
    int arr[3];
};

ただし、コードはコンパイルに失敗します。その理由は、配列は次のような代入演算子 = を使用してのみ初期化できるためです。

int arr[3] = {1,3,4};

ソリューション

  • 構造体を使用する:

解決策の 1 つは、構造体を使用して配列をカプセル化して、コンストラクターで初期化できるようにします。これは基本的に Boost.Array ライブラリが行うことです。

  • リスト初期化の使用:

C 11 ではリスト初期化が導入されており、これを使用して次の目的に使用できます。メンバー初期化子リスト内の配列を初期化します。次のコードは機能します:

class C {
public:
    C() : arr{1, 2, 3} { }
private:
    int arr[3];
};

C 03

C 03 標準では、コンストラクター初期化子での集合体 (配列を含む) の初期化については特に扱っていません。元のコードが無効なのは、配列の初期化子リストの使用を禁止する直接初期化の規則の結果です。

C 11

C 11 のリスト初期化この構文により、メンバー初期化子リスト内の配列の初期化が簡素化されます。ただし、上に示したように、正しい構文を使用することが重要です。

以上がメンバー初期化子リストで配列メンバーを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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