初期化リストとコンストラクターでの代入
C では、コンストラクターでクラス メンバーを初期化する一般的な方法が 2 つあります。メンバーを使用する初期化子リスト、またはコンストラクター内で直接値を割り当てます。構文的には異なりますが、コード生成と使用シナリオには微妙な違いがある可能性があります。
メンバー初期化子リスト
メンバー初期化子リストは、メンバー初期化のカンマ区切りのリストです。これはコンストラクター内のコロン (:) の後に配置されます。指定した例では:
MyClass::MyClass(): _capacity(15), _data(NULL), _len(0) { }
これにより、3 つのメンバー変数 _capacity、_data、および _len が指定された値で初期化されます。この構文は、定数メンバー、参照、および基本クラスのコンストラクターを初期化する場合に推奨されます。
コンストラクターでの代入
別のアプローチでは、内部のメンバー変数に値を代入できます。コンストラクター本体:
MyClass::MyClass() { _capacity=15; _data=NULL; _len=0 }
この構文は初期化によく使用されます。非定数メンバー変数。
コード生成と最適化
通常、コンパイラーは両方のアプローチに対して最適化されたコードを生成します。ほとんどの場合、結果として得られるアセンブリ コードは同一です。ただし、まれに、定数メンバーを初期化するとき、またはデフォルト値を設定するときに、メンバー初期化子リストを使用すると、より効率的なコードが得られることがあります。
使用シナリオ
前述のとおり、メンバー初期化子リストは、定数メンバー、参照、および基本クラスのコンストラクターを初期化するために必要です。他のメンバー変数については、どちらのアプローチも受け入れられます。ただし、重要な構造または初期化要件があるメンバー変数を初期化する場合は、メンバー初期化子リストを使用することがベスト プラクティスと考えられます。
例の特定のケースでは、メンバー初期化子リストを使用するか、値を代入します。コンストラクターには実質的な違いはありません。
以上がメンバー初期化子リストと C コンストラクターの代入: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。