Jaký je rozdíl v implicitním konstruktoru a výchozím konstruktoru v C ++?


Odpověď 1:
třída Foo {
 veřejnost:
  // Výchozí ctor.
  Foo (): i_ (0) {}

  // Implicitní konvertor ctor.
  Foo (int i): i_ (i) {}

  // Kopírovat ctor; nedochází k žádné konverzi.
  Foo (const Foo & f): i_ (f.i_) {}
 soukromé:
  int i_;
};

void Bar (Foo f) {
  // Udělej něco s f
}

hlavní() {
  Foo f0; // Používá výchozí ctor.
  Foo f1 (1); // Používá konverzní ctor.
  Pruh (f0); // Používá kopii ctor.
  Sloupec (2); // Používá implicitní konverzní ctor.
}
  Foo (int i = 0): i_ (i) {};

Odpověď 2:
#include 
struct X {
    X () {std :: cout << "Toto je výchozí ctor pro X \ n"; }
};
struct Y {
    Y (int n = 0) {std :: cout << "Toto je výchozí ctor pro Y \ n"; }
};
struct Z: X {
     // konstruktor Z je implicitně definován
     // jako Z (): X () {}
};
int main ()
{
    X x; // volá X :: X ()
    Y y; // volá Y :: Y ()
    Z z; // volá Z :: Z (), který volá X :: X ();
}