Zurückschieben der Zeichenfolge zum Vektor der Objekte

8

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?

    
ChrisD 31.12.2015, 02:48
quelle

3 Antworten

16

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.

%Vor%

Beachten Sie, wenn Sie das ctor explicit machen, wird das implizite Casting verboten.

%Vor%

und dann

%Vor%     
songyuanyao 31.12.2015, 02:55
quelle
7

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 .:

dfri 31.12.2015 02:51
quelle
2

Ich denke, dass beim ersten Pushback automatisch Foo(str) initialisiert wird. Also das ist im Grunde dasselbe!

    
John 31.12.2015 02:53
quelle