ホームページ  >  記事  >  バックエンド開発  >  C コンストラクターで定数ポインター メンバーを初期化するにはどうすればよいですか?

C コンストラクターで定数ポインター メンバーを初期化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-04 15:05:09155ブラウズ

How to Initialize a Constant Pointer Member in a C   Constructor?

C コンストラクターでの定数ポインター メンバーの初期化

C でクラスを操作する場合、ポインター メンバーをコンストラクター内の定数として使用します。これにより、ポインタはオブジェクトの存続期間を通じて不変のままになります。

次のコード例を考えてみましょう。

<code class="cpp">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* _foo) {
        foo = _foo;
    }
};</code>

このコードでは、foo メンバーは定数ポインタとしてマークされています。ただし、 foo ポインターがコンストラクター本体内で割り当てられているため、コンパイルは失敗します。これは定数メンバーには許可されていません。

正しい方法: 初期化子リストでの初期化

定数ポインターメンバーを初期化する正しい方法は、コンストラクター本体内のメンバー初期化子リストで初期化を行うことです。これは次のように実現できます。

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

初期化子リストで foo を初期化することにより、コンパイラーはコンストラクターが本体に入る前にポインターに値が割り当てられるようにします。これは、オブジェクト構築時に定数メンバーが初期化されるという要件を満たします。

改訂されたコードでは、foo メンバーとの混同を避けるために、受信パラメーター変数の名前が _foo に変更されます。

これに従うことで、このアプローチを使用すると、コンストラクターで定数ポインター メンバーを初期化し、その値がオブジェクトのライフサイクルを通じて不変であることを保証できます。

以上がC コンストラクターで定数ポインター メンバーを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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