C の初期変数代入は、コンストラクターと均一初期化の導入により進歩しました。従来の C のような構文を使用します。この記事では、これらのメソッド間の違いを調査し、均一な初期化が最適な場合についてのガイダンスを提供します。
C 風の初期化:
C 風のアプローチでは、変数へのリテラル値:
int x = 0;
コンストラクター初期化:
コンストラクターの初期化は括弧を利用して特定のコンストラクターを呼び出します:
int x(0);
均一な初期化:
C 11 で導入されました。均一な初期化では、中かっこを使用して値を代入します。変数:
int x {0};
プリミティブ データ型を扱う場合、3 つのメソッドはすべて同じ結果を生成します。一般に、選択は個人的な好みの問題です。
ただし、クラス型の場合、コンストラクターと中括弧の初期化には微妙な違いがあります。例:
vector<int> v (100); // Creates a 100-element vector vector<int> v {100}; // Creates a 1-element vector with value 100
この区別は、 std::vector が std::initializer_list を引数として受け取るコンストラクターを定義しているために発生します。中括弧の初期化では初期化子リストが作成され、コンテキストに応じて異なる解釈が生じる可能性があります。
初期化子リストには、一貫性を維持する上で大きな利点があります。たとえば、C の配列は次のように初期化されます。
int arr[] = {1, 2, 3, 4};
C 11 より前では、ベクトル
vector<int> v = {1, 2, 3, 4};
さらに、中括弧の初期化により、関数の宣言とコンストラクターの呼び出し時に発生する「最も厄介な解析」問題が回避されます。似ているように見えます。これにより、次の例に示すように、複数の引数を持つコンストラクターを直接呼び出すことができます。
rectangle w {origin(), extents()};
統一初期化を使用する場合:
クラス インスタンスの場合、一般に、特別な考慮事項が必要でない限り、均一な初期化を使用することをお勧めします。これにより、一貫性と読みやすさが確保され、潜在的な曖昧さの問題に対処できます。
以上がC の初期化: いつ均一初期化を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。