2012-01-14 7 views
10

可能性の重複:
What do the following phrases mean in C++: zero-, default- and value-initialization?「値を初期化する」とは何を意味しますか?

私は、例えば、クラスを持っている場合:私が作成したオブジェクトに使用

class Info 
{ 
    int x; 
    int y; 
}; 

Info *p = new Info(); 

情報の横にある角括弧は値を初期化していることを意味しますか?これとどう違うのですか、Info *p = new Info;

新旧のC++言語で異なる意味を区別するquestionがありますが、デフォルトと値の初期設定の意味の違いを知りたいと思います。値の初期化は何かをゼロに初期化することを意味しますか?

+0

[C++では次のフレーズは何を意味しますか?](http://stackoverflow.com/questions/1613341 /)、[C++ 03のdefault-initializeとvalue-initializeの違いは?](http://stackoverflow.com/questions/7084831/)。 – outis

答えて

19

Aは、変数がゼロで初期化さ値初期化またはデフォルトはを初期化することができます宣言。あなたの例で

Info *p = new Info(); <------- Value Initialization 
Info *p = new Info;  <------- Default Initialization 

8.5/5、標準C++ 03が適切にそれぞれを定義:

タイプTのオブジェクトゼロ初期化には、意味:

を - Tがスカラー型(3.9)の場合、オブジェクトはTに変換された0(ゼロ)の値に設定されます。
- Tが非共用体クラスの型である場合、各非静的データメンバおよび各基本クラスの下位オブジェクト
はゼロで初期化されます。
- Tが共用体型の場合、オブジェクトの最初の名前付きデータメンバーはゼロで初期化されます。
- Tが配列型の場合、各要素はゼロで初期化されます。
- Tが参照型の場合、初期化は実行されません。

タイプTのオブジェクトデフォルト初期化する手段:
を - Tは、非PODクラス型(条項9)である場合、Tの既定のコンストラクタが呼び出され(及び 初期化が悪い形成されていますTにアクセス可能なデフォルトコンストラクタがない場合)。
- Tが配列型の場合、各要素はデフォルトで初期化されます。
- そうでない場合、オブジェクトはゼロで初期化されます。

タイプTのオブジェクト値初期化する手段:
を - Tは、ユーザー宣言コンストラクタ(12とクラスタイプ(条項9)である場合。1)、Tのデフォルトの コンストラクタが呼び出されます(Tにアクセス可能な デフォルトコンストラクタがない場合、初期化は不正です)。
- Tがユーザ宣言されたコンストラクタのない非共用体クラスの型である場合、Tのすべての非静的 データ・メンバーおよび基本クラス・コンポーネントが値で初期化されます。
- Tが配列型の場合、各要素は値で初期化されます。
- それ以外の場合は、オブジェクトはゼロで初期化されます。

+0

Als - 非常に良い答え - 私の入力を救った! –

+0

私の場合、 'Info'クラスはPODクラス型です。それはデフォルトの初期化がゼロ初期化されることを意味しますか? – user1086635

+0

@ user1086635:はい。上記の標準引用符の第2段落にはっきりと記載されています。 –

関連する問題