Heim >Backend-Entwicklung >C++ >Konstruktorinitialisierung mit demselben Namen: C-Standardkonformität?

Konstruktorinitialisierung mit demselben Namen: C-Standardkonformität?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-15 10:18:03426Durchsuche

Constructor Initialization with Same Name: C   Standard Compliance?

Konstruktorinitialisierung von Mitgliedsvariablen mit gleichen Namen: Einhaltung des C-Standards?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn