C++ファイルでこの構文に出くわしました:
Obj obj = {};
それは何をするためのものか?デフォルトのコンストラクターを呼び出すだけですか?
C++ファイルでこの構文に出くわしました:
Obj obj = {};
それは何をするためのものか?デフォルトのコンストラクターを呼び出すだけですか?
式を囲む中括弧は、値の集約を{}
表し、値の空のリストを表します。
はい、{}
単にデフォルトのコンストラクターを呼び出します。(また、クラスが既定のコンストラクターを提供しない場合でも、すべてのメンバーが何らかの形で初期化されることを保証します。これは「値の初期化」と呼ばれます)。
C++11 より前は、すべてのメンバーの既定値で集計初期化を使用していました。しかし、これはすでに値の初期化、つまり「デフォルトのコンストラクターを呼び出す」という動作と同じでした。(実際、値の初期化は C++03 によって考案された概念であり、コンストラクター指向の構文で、集約型で既に存在していたものを表すことができます。)
ちょっとした癖があります: 宣言されたデフォルトのコンストラクターを呼び出さずexplicit
、代わりにエラーを生成します。explicit
解決策は、デフォルトのコンストラクターを宣言しないことです。そのようなコンストラクターに行き詰まっている場合は、 を取り除き、=
と言ってObj obj{}
ください。