2016-07-29 11 views

答えて

2

default constructorではなく、がコンパイラによって提供されるケースを考えてください。そして、= defaultを使用して、とにかくデフォルトコンストラクタを作成するようにコンパイラに指示できます。それ以外の場合(および特別なデフォルトのコンストラクタが必要な場合を除き)、デフォルトコンストラクタを指定する理由はありません(= defaultの有無にかかわらず)。

あなたの例では、 "明示的な" = defaultコンストラクタの必要はありません。それはもっとスタイルの問題です。

+0

ありがとうございます。そのシナリオでは、私はそれの利益を理解しています。しかし、もし私が実際にFoo構造体の上にあれば、現在はctrを省略したり、より具体的にしてデフォルトと宣言していると考えられるものは何ですか? – user695652

2

hereのように、引数を指定してコンストラクタを作成すると、デフォルトのコンストラクタは生成されません。そのような場合、defaultキーワードを使用すると、そのクラスに対してdefault constructorが生成されます。

しかし、扱っているオブジェクトにデフォルトのコンストラクタがあるかどうかを非常に慎重に検討してください。つまり、他のオブジェクトのデフォルトの初期化が適切な場合です。 PODのメンバーはデフォルトでは初期化されておらず、data member initalisersのないガベージデータが含まれている可能性があります。

2

これは意見に基づく質問のようです。しかし、2番目のオプションがより冗長であるため、最初のオプションが最も一般的に使用され、デフォルトの操作がdeleteでなければプログラマはデフォルトを使用しない傾向があります。

0

デフォルト以外の明示的なコンストラクタを指定した場合、コンパイラにはデフォルトでは提供されません。その場合、デフォルトのキーワードを使用して強制的にコンパイラに提供させることができます。

デフォルトのコンストラクタに特定の保護レベルが設定されているかどうかを確認する場合もあります。たとえば、デフォルトのコンストラクタがprivateかprotectedかを確認することができます。

関連する問題