Ich habe einen Code durchsucht, den ich für ein Schulprojekt geschrieben habe, das mir bei näherer Betrachtung seltsam erschien. Ich hatte eine Klasse ähnlich der folgenden:
%Vor% Warum ist der erste Aufruf von push_back
eine gültige Anweisung, obwohl str
keine Foo
ist?
Die Klasse Foo
hat einen nicht expliziten ctor, der ein Argument vom Typ std::string
verwendet (zB Converting constructor <) / a>), was bedeutet, dass es implizit von std::string
erzeugt werden könnte.
Beachten Sie, wenn Sie das ctor explicit
machen, wird das implizite Casting verboten.
und dann
%Vor% Der erste Pushback initialisiert automatisch ein Foo
-Objekt bei einem string
-Objekt; durch Ihre Initialisierungsliste.
(erwartet ein Foo
-Objekt, erhält einen String: Kann ein Foo
-Objekt mit einer einzigen Zeichenfolge initialisiert werden? Ja, seine Initialisierungsliste hat ein einzelnes Element und das Objekt wird von diesem Element initialisiert).
Einzelheiten finden Sie z. B .:
Tags und Links c++ type-conversion implicit-conversion