C では、const オブジェクトをデフォルトで構築するためにユーザー提供のデフォルト コンストラクターが必要なのはなぜですか?
C 標準では、プログラムがconst 修飾型のオブジェクトのデフォルトの初期化を呼び出す場合、基になるクラス型はユーザーが提供するデフォルトのコンストラクター。この要件は、
この困難を避けるために、標準では、次の条件が満たされていない POD 型から const オブジェクトを構築することはできないと規定されています。ユーザーが提供するデフォルトのコンストラクター。これにより、const オブジェクトが作成時に常に初期化されることが保証されます。
POD クラスと非 POD クラスの区別
明確にするために、標準の要件は、非 POD クラスの const オブジェクトに特に適用されます。 -PODクラス。 POD クラスには、仮想関数や基本クラスがなく、それ自体が POD であるデータ メンバーがあり、ユーザー定義のコンストラクターがなくてもデフォルトで初期化できます。対照的に、非 POD クラスでは、デフォルトの初期化を有効にするためにユーザーが提供するデフォルト コンストラクターが必要です。
説明例
次のコード スニペットを考えてみましょう:
struct B { B(): x(42) {} int doSomeStuff() const { return x; } int x; }; struct A { A() {} // Required by the standard B b; // Illustration purpose }; int main() { const A a; // Valid due to user-provided default constructor in A. }
この例では、構造体 A の const オブジェクト 'a' はデフォルトで構築できます。ユーザー提供のデフォルト コンストラクターがあり、非 POD クラスに対する標準の要件を満たします。
以上が`const` オブジェクトをデフォルトで構築するために、C クラスにユーザー定義のデフォルト コンストラクターが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。