Heim > Backend-Entwicklung > C++ > Warum kann ich ein „const'-Feld in einem Konstruktor nicht direkt in C initialisieren?

Warum kann ich ein „const'-Feld in einem Konstruktor nicht direkt in C initialisieren?

Susan Sarandon
Freigeben: 2024-11-03 12:50:31
Original
212 Leute haben es durchsucht

Why Can't I Initialize a `const` Field in a Constructor Directly in C  ?

Const-Felder in Konstruktoren initialisieren

Beim Definieren einer Klasse mit einem Const-Feld, das während der gesamten Lebensdauer des Objekts unveränderlich bleiben muss, ist die Initialisierung von entscheidender Bedeutung es richtig. Stellen Sie sich das folgende Szenario vor:

Problemstellung:

Sie möchten eine C-Klasse-Bar erstellen, die einen Foo-Zeiger als Eingabe akzeptiert und in ihrem Inneren einen unveränderlichen Verweis darauf beibehält Lebensdauer. Der folgende Code kann nicht kompiliert werden:

<code class="cpp">class Foo;

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

class Foo {
public:
  int a;
};</code>
Nach dem Login kopieren

Lösung:

Um ein const-Feld in einem Konstruktor korrekt zu initialisieren, müssen Sie eine Initialisierungsliste verwenden:

<code class="cpp">Bar(Foo* _foo) : foo(_foo) {
}</code>
Nach dem Login kopieren

Beachten Sie, dass wir den eingehenden Parameter in _foo umbenannt haben, um Namenskonflikte zu vermeiden.

Dieser Ansatz stellt sicher, dass der foo-Zeiger initialisiert wird, sobald das Bar-Objekt erstellt wird, und er unveränderlich bleibt die Dauer seines Lebenszyklus.

Das obige ist der detaillierte Inhalt vonWarum kann ich ein „const'-Feld in einem Konstruktor nicht direkt in C initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage