So initialisieren Sie ein unveränderliches Feld in einem Konstruktor: Eine eingehende Untersuchung
In C ist es möglich, auf ein Szenario zu stoßen, in dem Sie beabsichtigen, eine Klasse zu erstellen, die ein unveränderliches Feld in ihrem Konstruktor erfordert. In einem solchen Fall ist es von entscheidender Bedeutung, die Unveränderlichkeit des Feldes sicherzustellen. In diesem Artikel wird der richtige Ansatz zum Erreichen dieses Ziels erläutert.
Stellen Sie sich ein Szenario vor, in dem die Klasse Foo als Datenstruktur dient und die Klasse Bar ein Wrapper um Foo ist, der während der Konstruktion einen Foo-Zeiger als Argument benötigt. Unser Ziel ist es, sicherzustellen, dass dieser Zeiger während der gesamten Lebensdauer einer Bar-Instanz unveränderlich bleibt.
Ein Versuch, den const-Zeiger foo im Bar-Konstruktor zu initialisieren, könnte wie folgt aussehen:
<code class="cpp">class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; // Compiler error } }; class Foo { public: int a; };</code>
Allerdings , löst dieser Ansatz einen Kompilierungsfehler aus. Um dies zu beheben und die Unveränderlichkeit von foo innerhalb von Bar-Instanzen festzustellen, müssen wir eine Initialisierungsliste verwenden:
<code class="cpp">Bar(Foo* _foo) : foo(_foo) {}</code>
In dieser überarbeiteten Version nimmt der Konstruktor einen Foo-Zeiger als Argument und weist ihn dem Mitglied zu Variable foo mithilfe der Initialisierungsliste und benennt die eingehende Variable um, um mögliche Verwechslungen mit der Mitgliedsvariablen zu vermeiden.
Diese Technik stellt sicher, dass der foo-Zeiger sofort bei der Konstruktion von Bar initialisiert wird, wodurch er für den Rest der Bar unveränderlich wird Lebensdauer der Instanz.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich eine Const-Mitgliedsvariable in einem C-Konstruktor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!