2017-05-19 9 views
2

私は、既定のコンストラクタは何もアクションを実行しないことを読んだことがある(クラスTのデフォルトコンストラクタは、いくつかの条件が満たされていると、それらの条件が暗黙的に定義されたときに、私は推測該当する場合(つまり)アクションを実行しません簡単です。もしそうならhttp://en.cppreference.com/w/cpp/language/default_constructorデフォルトコンストラクタがアクションを実行しない場合、目的は何ですか?

それも、コンパイラによって追加されて、なぜそれがクラスのために必要とされる理由は、アクションを実行しません?

ありがとう!

+0

なぜf(x)= 0でxを入力する必要がありますか?それらは数学の言語の規則なので。それは入力で何かをするかどうかにかかわらず関数ですが、関数についてはまだ話していますが、x/yをマップすることはできます。 C++では、言語の一部としてクラスにコンストラクタが必要です。それが何かをしているかどうかは関係ありません、何かが呼び出されるためにそこにある必要があります。 –

+0

@ChristopherPisz、ありがとう。あなたが言っていることは、それが何らかのアクションを実行するかどうかに関わらず、コンストラクターがなければならないという言語のルールであるということです。または私は何かを誤解していますか? –

+0

それは私がインタビューで答える方法です。 CRTは、クラスがインスタンス化されるときにコンストラクタを呼び出します。したがって、「何もしない」場合でも、CRTは呼び出すために存在する必要があります。ボディが空であっても、クラスのメンバーデータが初期化されているのは、まだ構築時です。コンストラクタのトピックについては、https://isocpp.org/wiki/faq/ctors#overview-ctorsを参照してください。 –

答えて

1

を、それが呼び出される必要がある場合、コンパイラは、デフォルトのコンストラクタを生成しますので、これは可能性があり派生したclassや標準のライブラリコンテナなどでコンパイラは自由に最適化することができます明示的に定義されたdo nothing関数を使用してそれをそのまま残してください。

2

それの目的は、もし適切なコンストラクタが存在しない場合に利用できる生活にオブジェクトをもたらすことです

例:

struct Foo{}; 

struct Bar 
{ 
    Bar() = delete; // no default constructor 
}; 

int main() 
{ 
    Foo f; 
// Bar b; // does not compile 
} 
+0

なぜコンストラクタは何もしませんが、コンストラクタがあれば、クラスオブジェクトは生き生きと来ることができますか? –

+1

@ JakeBlandonデフォルトのコンストラクタのコンセプトがない場合、デフォルトでは構築できないオブジェクトをどのように作成しますか?私はそれがここで作られた点だと思う。 – Rakete1111

1

CRTは、クラスがインスタンス化されたコンストラクタを呼び出し、そこで一つはそれのために存在している必要がありますたとえそれが「何もしない」場合でも、電話する。その理由でコンパイラが提供されていない場合、コンパイラはデフォルトのコンストラクタを生成します。それ以外の場合は、オブジェクトをインスタンス化する方法がありません。構築時に発生する規則、ステップ、および順序は、言語の一部にすぎません。

ボディが空であっても、クラスのデータメンバが初期化されているのは構築時です。

また、構築時にクラスが別のクラスから派生している場合、何が起こるかを考慮してください。

コンストラクタのトピックを詳細に調べるには、http://isocpp.org/wiki/faq/ctors#overview-ctorsを参照してください。

+0

うーん、ありがとう、私は徐々にポイントを得ると思う..クラスは常にコンストラクタを呼び出すようにプログラムされているので、コンストラクタを定義する必要がありますか?または? –

関連する問題