ホームページ > バックエンド開発 > C++ > C でデフォルトで構築される Const オブジェクトにユーザー定義のデフォルト コンストラクターが必要なのはなぜですか?

C でデフォルトで構築される Const オブジェクトにユーザー定義のデフォルト コンストラクターが必要なのはなぜですか?

Barbara Streisand
リリース: 2024-11-25 02:54:10
オリジナル
544 人が閲覧しました

Why Do Default-Constructed Const Objects in C   Require a User-Defined Default Constructor?

C のデフォルトで構築された Const オブジェクトにユーザー定義のデフォルト コンストラクターが必要なのはなぜですか?

C 標準では、セクション 8.5 で次のように規定されています。デフォルトで初期化された const オブジェクトの場合、その型はユーザー指定のデフォルトを持つクラスである必要があります。コンストラクター。この要件を理解するには、POD (Plain Old Data) クラスと非 POD クラスの区別を理解する必要があります。

POD クラスと非 POD クラス

POD クラスは次のとおりです。ユーザー定義のコンストラクター、デストラクター、または仮想メンバー関数はありません。これらは初期化されていないメモリで初期化できるため、効率的なメモリ割り当てと直接メモリ操作が可能になります。一方、

非 POD クラスは、POD 制約のいずれかに違反します。これらは使用前に初期化する必要があり、初期化されていないメモリで初期化しようとすると未定義の動作が発生します。

デフォルト コンストラクターの要件

標準ではユーザーの要件が強制されます。 - デフォルトで構築された const オブジェクトのデフォルト コンストラクターを提供なぜなら:

  • オブジェクト ユーティリティの確保: POD クラスにユーザー定義のコンストラクターがない場合、デフォルトでは初期化されないままになります。初期化されていない POD クラスの const オブジェクトを宣言すると、値を変更できないため、そのオブジェクトは役に立たなくなります。

    POD p1; // uninitialized - can be assigned later
    const POD p2; // uninitialized - error, cannot be modified
    ログイン後にコピー
  • 非 POD 初期化の促進: User-定義されたコンストラクターはクラスを非 POD にします。非 POD クラスの const オブジェクトを宣言すると、初期化子が提供されているかどうかに関係なく、その初期化が保証されます。

    nonPOD_B b1; // initialized
    const nonPOD_B b2; // initialized
    ログイン後にコピー

したがって、default に対してユーザーが提供するデフォルト コンストラクターを要求することで、 C 標準では、構築された const オブジェクトが POD クラスの const オブジェクトであっても適切に初期化され、使用可能であることが保証されます。

以上がC でデフォルトで構築される Const オブジェクトにユーザー定義のデフォルト コンストラクターが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート