Initialisierung von Membervariablen mit gleichnamigen Konstruktorargumenten
In C ist es möglich, Membervariablen mithilfe von Konstruktorargumenten mit denselben Namen zu initialisieren als Mitgliedsvariablen. Es wurde bestätigt, dass diese Technik, wie im Beispiel unten gezeigt, ohne Warnungen oder Fehler funktioniert, wenn sie mit g 4.4 und clang kompiliert wird.
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} void printVec() { for (unsigned int i = 0; i < vec.size(); i++) printf("%i ", vec.at(i)); printf("\n"); } };
Gemäß dem C-Standard (§12.6.2/7) Diese Initialisierung ist legal und funktioniert garantiert. Die Namen in der Ausdrucksliste eines Mem-Initialisierers werden im Bereich des Konstruktors ausgewertet, sodass der Zeiger „this“ verwendet werden kann, um auf das zu initialisierende Objekt zu verweisen.
Im obigen Beispiel das Konstruktorargument vec wird mit der gleichnamigen Mitgliedsvariablen vec initialisiert. Diese Initialisierung erfolgt jedes Mal, wenn ein Objekt der Klasse Blah erstellt wird.
Empfehlung
Erwägen Sie, den Konstruktorparameter als Konstantenreferenz zu akzeptieren, um unnötiges Kopieren des ursprünglichen Vektorobjekts zu vermeiden , wie unten zu sehen:
Blah(const std::vector<int> & vec): vec(vec) {}
Das obige ist der detaillierte Inhalt vonKönnen C-Membervariablen mit gleichnamigen Konstruktorargumenten initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!