Felder in Konstruktoren initialisieren: Unterschiede zwischen Initializer -Liste und Konstruktor Body
In C bieten Konstruktoren eine bequeme Möglichkeit, die Instanzfelder während der Objektkreation zu initialisieren. There are two primary methods for field initialization in constructors: the initializer list and the constructor body.
Initializer List
Thing(int _foo, int _bar): member1(_foo), member2(_bar) {}
The initializer list immediately follows the constructor parameter list und ermöglicht die direkte Initialisierung von Feldern, bevor die Konstruktor -Körperschaft ausgeführt wird. Diese Methode wird aufgrund ihrer prägnanten Syntax und Klarheit üblicherweise bevorzugt.
Konstruktor Bod member1 = _foo; member2 = _Bar; }
der Konstruktorkörper verwendet Zuweisungsanweisungen, um Felder innerhalb der Funktionskörper zu initialisieren. Diese Methode ist weniger verbreitet, da sie mehr Codezeilen erfordert und für Fehler anfällig sein kann, wenn die Zuordnungsanweisungen in der gewünschten Reihenfolge nicht ausgeführt werden. was zu undefiniertem Verhalten führt. Im Gegensatz dazu initialisiert der Konstruktorkörper Felder in ihre Standardwerte, wenn keine explizite Zuweisung bereitgestellt wird.Thing(int _foo, int _bar) { member1 = _foo; member2 = _bar; }
Initialisierungsreihenfolge:
Die Initializer -Liste initialisiert Felder, bevor der Konstruktorkörper ausgeführt wird. Dies stellt sicher, dass Felder in der richtigen Reihenfolge initialisiert werden, auch wenn sich die Reihenfolge der Zuweisungsanweisungen in der Konstruktorkörper ändert.Fehlerbehandlung:
Verwenden der Initialisiererliste hilft, Fehler zu verhindern, die durch falsche Zuweisungsanweisungen verursacht wurden. Wenn beispielsweise ein Feld versehentlich zweimal in der Konstruktor -Körperschaft initialisiert wird, erhöht die Initializer -Liste einen Fehler.Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3