ホームページ  >  記事  >  バックエンド開発  >  C でコンストラクターの「const」フィールドを直接初期化できないのはなぜですか?

C でコンストラクターの「const」フィールドを直接初期化できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 12:50:31160ブラウズ

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

コンストラクターの Const フィールドの初期化

オブジェクトの存続期間を通じて不変でなければならない const フィールドを持つクラスを定義する場合、初期化することが重要ですそれは正しく。次のシナリオを考えてみましょう:

問題ステートメント:

入力として Foo ポインターを受け入れ、その内部でそれへの不変参照を維持する C クラス Bar を作成したいと考えています。一生。次のコードはコンパイルに失敗します:

<code class="cpp">class Foo;

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

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

解決策:

コンストラクターで const フィールドを正しく初期化するには、初期化子リストを使用する必要があります:

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

名前を避けるために、受信パラメータの名前を _foo に変更したことに注意してください。

このアプローチにより、Bar オブジェクトが構築されるとすぐに foo ポインターが初期化され、そのライフサイクルの間は不変のままになります。

以上がC でコンストラクターの「const」フィールドを直接初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。