コンストラクターの初期化による不変クラスのプロパティの維持
C では、コンストラクターはオブジェクトの初期状態を確立する際に重要な役割を果たします。場合によっては、インスタンスの存続期間中、特定のクラス プロパティを変更しない必要がある状況に遭遇することがあります。一般的なシナリオの 1 つは、オブジェクトの作成中に定数ポインターを割り当てることです。
次のコード スニペットを考えてみましょう:
<code class="C++">class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; } }; class Foo { public: int a; };</code>
ここでの目的は、変更不可能なポインターを持つ Bar オブジェクトを作成することです。 Foo インスタンスに。ただし、コンパイル時にエラーが発生します。これは、「this」ポインターがクラスのコンストラクター内で直接アクセスできないためです。
この問題を解決するには、次の構文を使用してコンストラクターの初期化子リスト内の定数フィールドを初期化する必要があります:
<code class="C++">Bar(Foo* _foo) : foo(_foo) { }</code>
この更新されたコードでは、インスタンス メンバーとの混同を避けるために、受信パラメータの名前を変更しています。初期化子リスト内で、_foo 引数の値を foo 定数メンバーに明示的に割り当てます。
この手法を使用することで、オブジェクトの構築中に foo ポインタを const 値に効果的に設定し、オブジェクト全体にわたってその不変性を確保します。 Bar インスタンスの存続期間。
以上がC コンストラクターで const メンバー変数を初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。