ホームページ > バックエンド開発 > C++ > C のデフォルト コンストラクターは組み込み型を初期化しますか?

C のデフォルト コンストラクターは組み込み型を初期化しますか?

DDD
リリース: 2024-12-09 06:31:05
オリジナル
313 人が閲覧しました

Do C  's Default Constructors Initialize Built-in Types?

組み込み型は C のデフォルト コンストラクターによって初期化されますか?

C では、コンパイラーによって生成される暗黙的なデフォルト コンストラクターは次のとおりです。クラスメンバーの初期化を担当します。ただし、この動作が組み込み型にも拡張されるという誤解がよくあります。

デフォルトの初期化動作

暗黙的なデフォルト コンストラクターは初期化しません組み込み型のメンバー。このようなコンストラクターがユーザー定義の初期化なしで使用されると、組み込み型のメンバーは初期化されないままになります。

ルールの例外

一方、デフォルトのコンストラクターは通常、初期化されません。組み込み型を初期化します。初期化が発生する特定の状況があります:

Value初期化:
C 03 以降では、構文 C() によってクラス インスタンスの値の初期化が呼び出されます。クラスにユーザー宣言されたコンストラクターがない場合、値の初期化により組み込み型のメンバーがゼロ初期化されます。

集合体初期化:
集合体初期化構文 (C c = など) {} は、コンストラクターを使用せずに初期化を実行します。これにより、組み込み型のメンバーがゼロで初期化されます。

例:

ユーザー宣言のコンストラクターなしで次のクラスを考えてみましょう:

class C { 
public:
  int x;
};
ログイン後にコピー

明示的なし初期化:

C c; // Compiler-provided default constructor used
// c.x contains garbage
ログイン後にコピー

明示的な値の初期化を使用:

C c = C(); // Value-initialization used
assert(c.x == 0);
ログイン後にコピー

集約初期化を使用:

C c = {}; // Aggregate initialization
assert(c.x == 0);
ログイン後にコピー

上記の動作は次のような可能性があることに注意することが重要です。使用する C のバージョンと特定のクラス定義によって異なります。

以上がC のデフォルト コンストラクターは組み込み型を初期化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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