Was ist der Unterschied zwischen einem impliziten Konstruktor und einem Standardkonstruktor in C ++?


Antwort 1:
Klasse Foo {
 Öffentlichkeit:
  // Default ctor.
  Foo (): i_ (0) {}

  // Implizite Konvertierung ctor.
  Foo (int i): i_ (i) {}

  // Copy ctor; Es erfolgt keine Konvertierung.
  Foo (const Foo & f): i_ (f.i_) {}
 Privat:
  int i_;
};

Leere Bar (Foo f) {
  // Mach was mit f
}

main () {
  Foo f0; // Verwendet Standard-CTOR.
  Foo f1 (1); // Verwendet Conversion CTOR.
  Balken (f0); // Verwendet copy ctor.
  Bar (2); // Verwendet implizite Konvertierung ctor.
}
  Foo (int i = 0): i_ (i) {};

Antwort 2:
#include 
struct X {
    X () {std :: cout << "Dies ist die Standardeinstellung für X \ n"; }
};
Struktur Y {
    Y (int n = 0) {std :: cout << "Dies ist die Standardeinstellung für Y \ n"; }
};
Struktur Z: X {
     // Der Konstruktor von Z ist implizit definiert
     // als Z (): X () {}
};
int main ()
{
    X x; // ruft X :: X () auf
    Y y; // ruft Y :: Y () auf
    Z z; // ruft Z :: Z () auf, was X :: X () aufruft;
}