Heim >Backend-Entwicklung >C++ >Wie initialisiert man eine const-Mitgliedsvariable in einem C-Konstruktor?

Wie initialisiert man eine const-Mitgliedsvariable in einem C-Konstruktor?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 02:58:29998Durchsuche

How do you initialize a const member variable in a C   constructor?

Aufrechterhaltung unveränderlicher Klasseneigenschaften mit Konstruktorinitialisierung

In C spielen Konstruktoren eine entscheidende Rolle bei der Festlegung des Anfangszustands eines Objekts. Gelegentlich kommt es vor, dass bestimmte Klasseneigenschaften während der gesamten Lebensdauer der Instanz unverändert bleiben müssen. Ein häufiges Szenario ist die Zuweisung eines konstanten Zeigers während der Objekterstellung.

Betrachten Sie den folgenden Codeausschnitt:

<code class="C++">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};</code>

Die Absicht hier ist, ein Bar-Objekt mit einem nicht veränderbaren Zeiger zu erstellen zu einer Foo-Instanz. Beim Kompilieren tritt jedoch ein Fehler auf. Dies liegt daran, dass auf den „this“-Zeiger im Konstruktor einer Klasse nicht direkt zugegriffen werden kann.

Um dieses Problem zu lösen, müssen wir das Konstantenfeld in der Initialisierungsliste des Konstruktors mit der folgenden Syntax initialisieren:

<code class="C++">Bar(Foo* _foo) : foo(_foo) {
}</code>

In diesem aktualisierten Code benennen wir den eingehenden Parameter um, um Verwechslungen mit dem Instanzmitglied zu vermeiden. Innerhalb der Initialisierungsliste weisen wir den Wert des _foo-Arguments explizit dem foo-Konstantenelement zu.

Durch die Verwendung dieser Technik setzen wir den foo-Zeiger während der Objektkonstruktion effektiv auf einen konstanten Wert und stellen so seine Unveränderlichkeit während des gesamten Prozesses sicher Lebensdauer der Bar-Instanz.

Das obige ist der detaillierte Inhalt vonWie initialisiert man eine const-Mitgliedsvariable in einem C-Konstruktor?. 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