Frage> Was ist der richtige Weg, um die Vektorelementvariable der Klasse zu initialisieren? Müssen wir es überhaupt initialisieren?Korrekter Weg zum Initialisieren der Vektorelementvariable
Antwort
Siehe http://en.cppreference.com/w/cpp/language/default_initialization
Standard Initialisierung in drei Situationen durchgeführt:
- wenn Eine Variable mit automatischer Speicherdauer wird ohne Initialisierer
- deklariert, wenn ein Objekt mit dynamischer Speicherdauer von einem neuen Ausdruck ohne erstellt wird Ein Initialisierer
- , wenn eine Basisklasse oder ein nicht statisches Datenelement in einer Konstruktorinitialisierungsliste nicht erwähnt wird und dieser Konstruktor heißt.
Die Auswirkungen der Standardinitialisierung sind:
- Wenn T ein Klassentyp ist, wird der Standard-Konstruktor den Anfangswert für das neue Objekt zu schaffen, genannt.
- Wenn T ein Array-Typ ist, wird jedes Element des Arrays standardmäßig initialisiert.
- Ansonsten wird nichts getan.
Da std::vector
ist eine Klasse, geben Sie den Standard-Konstruktor aufgerufen wird. Daher wird die manuelle Initialisierung nicht benötigt.
Überraschung für mich, dass 'Klasse T2 { int mem; public: T2() {} // "mem" nicht in Initialisierungsliste }; 'const T2 t2; // ok, ruft den vom Benutzer bereitgestellten Standard ctor // t2.mem ist default-initialisiert' – q0987
Ich habe gerade den obigen Code in VS2010 getestet und es ist falsch. Das t2.mem wird NICHT standardmäßig initialisiert! – q0987
@ q0987: 'mem' ist ein' int', es ist weder eine Klasse noch ein Array-Typ, daher wird es nicht standardmäßig initialisiert. Der Code, der auf cppreference zur Verfügung gestellt wird, ist fast immer nach dem C++ 11-Standard verifiziert, aber ich weiß nicht, ob sich dies für den gegebenen Fall ändert (vorausgesetzt, das 'const'-Qualifikationsmerkmal). Aber selbst wenn das Beispiel \t inkonsistent und vielleicht sogar falsch ist, sind die Erklärung und der Standard selbst nicht. – Zeta
Sie müssen es nicht explizit initialisieren, es wird erstellt, wenn Sie eine Instanz Ihrer Klasse erstellen.
Kommt drauf an. Wenn Sie einen Vektor der Größe 0 wollen, müssen Sie nichts tun. Wenn Sie wollten, sagen wir, verwenden Sie eine Größe N Vektorfüllung von 42s dann den Konstruktor initializer Listen:
ClassName() : m_vecInts(N, 42) {}
- 1. Korrekter Ort zum Initialisieren von Klassenvariablen?
- 2. Xml.Serialization, Korrekter Weg zum Anfügen
- 3. Korrekter Weg, ein Keras sequentielles neuronales Netz zu initialisieren?
- 4. Korrekter Weg, um ein Array von boost :: scoped_ptr zu initialisieren?
- 5. Korrekter Weg, dynamisches Array in C++ zu initialisieren
- 6. RhinoMocks: Korrekter Weg zum Mock Property Getter
- 7. Korrekter Weg zum Wert von try/catch
- 8. Korrekter Weg zum Erhalt des negativsten Double
- 9. C-Header-Dateien - Korrekter Weg zum Einbinden
- 10. Korrekter Weg, um JFrame mit einem JPanel zu initialisieren
- 11. Korrekter Weg zum Schließen der Datenbankverbindung im Ausnahmefall
- 12. Korrekter Weg zum Entfernen der Klasse beim zweiten Klick
- 13. Korrekter Weg zur Verwendung der Funktion ARMAResult.predict()
- 14. Korrekter Weg zur Implementierung der C# -Konsolenanwendung?
- 15. Korrekter Weg zum Setzen des Exit Code of Process?
- 16. Korrekter Weg, um bootstrap.css.map einzuschließen?
- 17. Korrekter Weg zum Hinzufügen eines neuen Ressourcenordners in Android Studio?
- 18. Korrekter Weg zum Implementieren eines benutzerdefinierten Popup-Dialogfelds tkinter
- 19. Korrekter Weg zum Überspringen einer Dann-Funktion in Q Promises
- 20. Korrekter Weg zum Lesen von Elf-Dateien in C
- 21. Korrekter Weg sessionFactory zu verwenden
- 22. Wie initialisiert man eine Vektorelementvariable in der Klassendefinition?
- 23. Korrekter Weg, Benutzerinformationen mit der Twitter API abzurufen?
- 24. Korrekter Weg, IoC-Container zu passieren
- 25. Korrekter Weg zur Veröffentlichung von Website-Updates
- 26. Korrekter Weg, um lodash zu importieren
- 27. Korrekter Weg, um die Antwort zu beenden
- 28. Korrekter Weg von Mongo zu Datentabelle
- 29. Korrekter Weg, Ausnahmen in Python zu behandeln?
- 30. Korrekter Weg zur Erkennung von Sequenzparametern?
Nein, es sei denn, Sie möchten eine Anfangskapazität angeben (oder dessen Inhalt initialisieren, was Sie mit Initialisierungslisten in C++ 11 oder Boosts "list_of" I _think_ tun können). – hmjd
Der Vektor beider Wege wird unter Verwendung des Standardkonstruktors konstruiert, aber 1. wird bevorzugt –
@ Mr.Anubis: Nicht von mir. –