[c++] C + +の恐ろしいコンストラクタ


Answers

3行目は引数を取らずFooを返す関数を宣言するものとして解析されます。

Question

可能な重複:
引数のないコンストラクタを呼び出すために空の括弧を使うとエラーになるのはなぜですか?

このコードを持つことができます

class Foo {
  Foo(int) { }
};

それから、結果はあります:

int main() {
  Foo f1 = Foo(5); // 1: OK, explicit call
  Foo f2(5); // 2: OK, implicit call
  Foo f3(); // 3: no error, "f3 is a non-class type Foo()", how so?
  Foo f4(f1); // 4: OK, implicit call to default copy constructor
  Foo f5; // 5: expected error: empty constructor missing
}

ケース3で何が起こっているのか説明できますか?




ケース3でfooを返すf3という関数を定義しました。ケース5では、デフォルトコンストラクタが定義されていないため、エラーが発生します。




  • f1は、明示的な呼び出しの後にコピーコンストラクタを呼び出します。あなたはこのコンストラクタで間違っていました
  • f2は明示的なコンストラクタ呼び出しです//あなたはここでも間違っていました
  • f3は関数を宣言する
  • f4はコピー・コンストラクタで、 f1ように//ここにいる
  • f5がデフォルトのコンストラクタを呼び出す//あなたがここに再びいる



Related