次のコンストラクタは、C++のために同じであれば、私は思ったんだけど:中括弧は空のコンストラクタに関係しますか?
class foo
{
public:
foo(void){};
...
}
と
class foo
{
public:
foo(void);
...
}
中括弧は、これらの2つの場合には関係ありますか?どうもありがとう!
次のコンストラクタは、C++のために同じであれば、私は思ったんだけど:中括弧は空のコンストラクタに関係しますか?
class foo
{
public:
foo(void){};
...
}
と
class foo
{
public:
foo(void);
...
}
中括弧は、これらの2つの場合には関係ありますか?どうもありがとう!
彼らは同じではありません。 {}
は通常の関数本体を表し、前者はfunction definitionとする。
foo(void){}; // function definition
foo(void); // function declaration
はい。それがなければ宣言だけです。両方とも宣言と定義です。それを使用してみてください - 定義なしでリンカエラーが発生します
はいそうです。もう1つはundefined reference to foo::foo
を生成します(別の場所で定義されていない場合)。あなたがC++ 11以上を使用することができる場合、あなたは
foo()=default;
を使用することができますコンパイラが生成コンストラクタ
'= default'提案に感謝します! – zack
'foo()= default;'は 'foo(){}'とまったく同じではないことに注意してください。最初のものは "些細な"コンストラクタであり、2番目のものはそうではありません。ユーザーが定義したコンストラクタは、たとえ空であっても簡単なことではありません。 –
を定義するためにこれらのブラケットは、空、インラインコンストラクタを宣言します。その場合、コンストラクタは存在しますが、コンストラクタがまだ暗黙のうちに行うこと以外は何もしません。
2番目のケースでは、コンパイラはそれらがなくても、.cppファイルなどの別の場所で実装を期待しています。
リンクありがとうございます! – zack