構造体をコンストラクタで初期化した時0クリアされるのでしょうか

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
立花希海
記事: 9
登録日時: 13年前
連絡を取る:

構造体をコンストラクタで初期化した時0クリアされるのでしょうか

#1

投稿記事 by 立花希海 » 12年前

こんにちは。
配列などをコンストラクタで初期化すれば全ての要素が0クリアされるとの事ですが

コード:

class CTEST{
public:
    char m_cString[ 256 ];
    CTEST()
     : m_cString()
    {}
};
構造体を同様の書式にした時、構造体は0クリアされるのでしょうか

コード:

class CTEST{
public:
    struct StTEST
        int   m_Value;
    };
    StTEST m_stTest;
    CTEST()
     : m_stTest()
    {}
};
構造体にはコンストラクタを作らない、memsetでクリアしない場合です。

テストした限りでは0になっているのですがたまたまなのか一応初期化されるのか
各要素をコンストラクタで初期化すれば確実なのでしょうけれど仕様的にどうなのか
気になったので質問します。
マルチバイトを忘れずに

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 構造体をコンストラクタで初期化した時0クリアされるのでしょうか

#2

投稿記事 by h2so5 » 12年前

C++の規格上、0で初期化されることになっています。

http://www.open-std.org/jtc1/sc22/wg21/ ... /n1905.pdf
8. An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
To value-initialize an object of type T means:
— if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is called
(and the initialization is ill-formed if T has no accessible default constructor);
— if T is a non-union class type without a user-declared constructor, then every non-static data member and baseclass component of T is value-initialized;
96)
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized

立花希海
記事: 9
登録日時: 13年前
連絡を取る:

Re: 構造体をコンストラクタで初期化した時0クリアされるのでしょうか

#3

投稿記事 by 立花希海 » 12年前

なるほど。ありがとうございました!!
マルチバイトを忘れずに

閉鎖

“C言語何でも質問掲示板” へ戻る