C++ 11でdefault
キーワードを使用するのはいつですか?C++ 11:デフォルトのコンストラクタ:ImplicitまたはExplicit?
は今
struct Foo {
};
を書くために、もう1つは
struct Foo {
Foo() = default;
};
を書くべき悪いと考えられますか?
C++ 11でdefault
キーワードを使用するのはいつですか?C++ 11:デフォルトのコンストラクタ:ImplicitまたはExplicit?
は今
struct Foo {
};
を書くために、もう1つは
struct Foo {
Foo() = default;
};
を書くべき悪いと考えられますか?
default constructorがではなく、がコンパイラによって提供されるケースを考えてください。そして、= default
を使用して、とにかくデフォルトコンストラクタを作成するようにコンパイラに指示できます。それ以外の場合(および特別なデフォルトのコンストラクタが必要な場合を除き)、デフォルトコンストラクタを指定する理由はありません(= default
の有無にかかわらず)。
あなたの例では、 "明示的な" = default
コンストラクタの必要はありません。それはもっとスタイルの問題です。
hereのように、引数を指定してコンストラクタを作成すると、デフォルトのコンストラクタは生成されません。そのような場合、default
キーワードを使用すると、そのクラスに対してdefault constructorが生成されます。
しかし、扱っているオブジェクトにデフォルトのコンストラクタがあるかどうかを非常に慎重に検討してください。つまり、他のオブジェクトのデフォルトの初期化が適切な場合です。 PODのメンバーはデフォルトでは初期化されておらず、data member initalisersのないガベージデータが含まれている可能性があります。
これは意見に基づく質問のようです。しかし、2番目のオプションがより冗長であるため、最初のオプションが最も一般的に使用され、デフォルトの操作がdelete
でなければプログラマはデフォルトを使用しない傾向があります。
デフォルト以外の明示的なコンストラクタを指定した場合、コンパイラにはデフォルトでは提供されません。その場合、デフォルトのキーワードを使用して強制的にコンパイラに提供させることができます。
デフォルトのコンストラクタに特定の保護レベルが設定されているかどうかを確認する場合もあります。たとえば、デフォルトのコンストラクタがprivateかprotectedかを確認することができます。
ありがとうございます。そのシナリオでは、私はそれの利益を理解しています。しかし、もし私が実際にFoo構造体の上にあれば、現在はctrを省略したり、より具体的にしてデフォルトと宣言していると考えられるものは何ですか? – user695652