Was ist der Name und der Grund für die Zuweisung von Membervariablen zwischen Funktionsnamen und geschweiften Klammern?

8

Sehen Sie sich dieses Code-Snippet an:

%Vor%

Das bedeutet angeblich dasselbe:

%Vor%

Warum würden Sie das erstere oder das letztere benutzen? Und wie heißt der Name?

    
bastibe 02.09.2010, 10:01
quelle

3 Antworten

17

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:

  1. In Ihrem ersten Beispiel wird jedes Mitglied mit dem entsprechenden Konstruktor, wahrscheinlich dem Kopierkonstruktor, initialisiert.
  2. In Ihrem zweiten Beispiel wird jedes Element mit dem Standardkonstruktor erstellt, und dann wird zusätzlicher Code ausgeführt, um ihn zu initialisieren, wahrscheinlich der Zuweisungsoperator.

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.

    
Gorpik 02.09.2010, 10:12
quelle
3

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.

    
ckv 02.09.2010 10:03
quelle
0

BTW, Bjarne Stroustrup sagte in Die C ++ Programmiersprache , dass mit der Initialisierungsliste eine gewisse Effizienz erzielt werden kann und er empfahl uns, die Initialisierungsliste zu verwenden!

    
ylzhang 02.09.2010 11:02
quelle

Tags und Links