1

C++ファイルでこの構文に出くわしました:

Obj obj = {};

それは何をするためのものか?デフォルトのコンストラクターを呼び出すだけですか?

4

3 に答える 3

6

式を囲む中括弧は、値の集約を{}表し、値の空のリストを表します。

はい、{}単にデフォルトのコンストラクターを呼び出します。(また、クラスが既定のコンストラクターを提供しない場合でも、すべてのメンバーが何らかの形で初期化されることを保証します。これは「値の初期化」と呼ばれます)。

C++11 より前は、すべてのメンバーの既定値で集計初期化を使用していました。しかし、これはすでに値の初期化、つまり「デフォルトのコンストラクターを呼び出す」という動作と同じでした。(実際、値の初期化は C++03 によって考案された概念であり、コンストラクター指向の構文で、集約型で既に存在していたものを表すことができます。)

ちょっとした癖があります: 宣言されたデフォルトのコンストラクターを呼び出さずexplicit、代わりにエラーを生成します。explicit解決策は、デフォルトのコンストラクターを宣言しないことです。そのようなコンストラクターに行き詰まっている場合は、 を取り除き、=と言ってObj obj{}ください。

于 2015-07-21T09:02:04.627 に答える