Frage:
Liegt es im C Standard zum Initialisieren von Mitgliedsvariablen mithilfe eines Konstruktorarguments, das denselben Namen wie das Mitglied hat variabel?
Beispiel:
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} };
Antwort:
Ja, es ist legal und funktioniert garantiert entsprechend das C Standard.
Erklärung:
Abschnitt 12.6.2/7 des C-Standards besagt: „Namen in der Ausdrucksliste eines Mem-Initialisierers werden im ausgewertet Geltungsbereich des Konstruktors, für den der Mem-Initializer angegeben ist.“ Mit anderen Worten, das Konstruktorargument und die Mitgliedsvariable sind unterschiedliche Entitäten, verwenden aber denselben Namen.
Dadurch können wir die Mitgliedsvariable mit dem Wert des Konstruktorarguments initialisieren, wie im Beispiel gezeigt.
Hinweis:
Es wird empfohlen, konstante Referenzen für Konstruktorargumente zu verwenden, um unnötiges Kopieren von Objekten zu vermeiden. Daher wäre es vorzuziehen, Folgendes zu verwenden:
Blah(const std::vector<int> &vec): vec(vec) {}
Das obige ist der detaillierte Inhalt vonKonstruktorinitialisierung mit demselben Namen: C-Standardkonformität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!