初期化リスト (中括弧) の利点
質問が示唆しているように、中括弧を使用してオブジェクトを初期化する (リスト初期化) には、リスト初期化よりもいくつかの利点があります。他の方法。特に、次の代替方法と比較して、オブジェクトを構築するためのより明確でエラーが発生しにくい方法が提供されます。
MyClass a1 {a}; // list initialization MyClass a2 = {a}; // copy initialization MyClass a3 = a; // copy initialization using an object MyClass a4(a); // constructor initialization
リスト初期化の主な利点は、縮小変換を防止できることです。これは、データをより広い型から狭い型に変換できないことを意味し、精度の低下やデータの破損につながる可能性があります。許可されていない変換は次のとおりです:
たとえば、中括弧を使用した次の初期化では、値 7.9 は切り捨てられなければ char に収まらないため、エラーが発生します。
char c2 { 7.9 }; // error: possible truncation
対照的に、他の初期化方法では縮小変換が可能になり、予期しない結果が生じる可能性があります。次の点を考慮してください。
char c2 = 7.9; // sets c2 to 7, truncating the decimal part
リスト初期化のもう 1 つの利点は、型と値を区別できることです。 auto キーワードを使用してイニシャライザから型を推測する場合、オブジェクトを作成するために中括弧が必要です。これは、変数を特定の型で初期化する代入演算子 (=) とは対照的です。次に例を示します。
auto z1 {99}; // z1 is an int auto z2 = {99}; // z2 is std::initializer_list<int>
以上がC でオブジェクトの初期化に中括弧を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。