Nein, sie meinen nicht genau dasselbe.
Wenn ein Konstruktor ausgeführt wird, werden vor dem Eingeben des Codeblocks (des Codes zwischen den geschweiften Klammern) alle Objektdatenelemente erstellt. In den Initialisierern (dem Code nach dem Doppelpunkt und vor den geschweiften Klammern) legen Sie fest, welche Konstruktoren für diese Elemente verwendet werden sollen. Wenn Sie keinen Konstruktor für ein bestimmtes Datenelement angeben, wird der Standardkonstruktor verwendet.
Wenn Sie also die Initialisierungsliste (erstes Beispiel) verwenden, werden die rechten Konstruktoren für jedes Mitglied verwendet und es ist kein zusätzlicher Code erforderlich. Wenn nicht, wird zuerst der Standardkonstruktor verwendet und dann der Code in den geschweiften Klammern ausgeführt.
Zusammenfassend:
EDIT: Sorry, habe vergessen, deine Fragen in der letzten Zeile zu beantworten.
Der Name des Codes zwischen dem Doppelpunkt und den geschweiften Klammern ist die Initialisierungsliste.
Wenn Sie wissen, welcher der richtige Konstruktor für eine Variable oder ein Datenelement ist, verwenden Sie ihn auf jeden Fall. Aus diesem Grund haben die meisten Klassen andere Konstruktoren als nur einen Standardkonstruktor. Sie sollten also besser die Initialisierungsliste verwenden.
Die Initialisierungsliste ist fast nie langsamer als die andere Technik und kann leicht schneller sein. Eine bekannte Regel beim Schreiben von Code ist "nicht zu früh optimieren", aber es gibt ein nicht so bekanntes Gegenstück: Pessimize nicht vorzeitig. Wenn Sie zwei Optionen zum Schreiben eines Codeabschnitts haben und einer von ihnen besser als der andere sein kann, aber keine zusätzliche Arbeit oder Komplexität erfordert, verwenden Sie sie. In Ihrem Beispiel gibt es keinen Unterschied, da Sie einen eingebauten Typ verwenden ( int
). Aber wenn Sie Klassen verwenden würden, gäbe es einen Unterschied, also gewöhnen Sie sich an die Initialisierungsliste.
Der ehemalige heißt Initialisierungslisten. Sie können viele Artikel dafür bekommen.
Die besonderen Gründe für die Verwendung von Initializer-Listen finden Sie hier Ссылка
Sie können auf Effective C ++ verweisen, um einen vollständigen Einblick in Initializer-Listen zu erhalten. Hoffe es ist klar.
Tags und Links c++ language-features