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>
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>
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!