2012-04-11 15 views
7

int a = int();は必ず私にゼロを与えますか?"int a = int();"必然的に私にゼロを与えますか?

intchar,double,boolまたはポインタタイプに置き換えた場合はどうですか?

ここで、これは言語標準で指定されていますか?

+0

の可能な重複が(HTTP ://stackoverflow.com/questions/5113365/do-built-in-types-have-default-constructors) – Kaz

答えて

17

int a = int();は必然的に私にゼロを与えますか?

はい、標準ではゼロになることが保証されています。
これは、値の初期化として知られています。タイプintの場合、値の初期化は、基本的にゼロ初期化となります。

ここで、これは言語標準で指定されていますか?

ルールが明確セクション8.5標準で指定されています。 私はここでQに関連するものを引用します:

C++ 03:8.5初期化子
パラ7:

初期化子括弧の空集合であるオブジェクトを、すなわち、()は、値で初期化される。 - Tである場合

:T型のオブジェクトが意味の値初期化

:5として

値初期&ゼロ初期化は8.5パラで定義されていますユーザが宣言したコンストラクタ(12.1)を持つクラス型(9節)の場合、Tのデフォルトの コンストラクタが呼び出されます(Tにアクセス可能な01がない場合、初期化は不正ですデフォルトコンストラクタ);
- Tがユーザ宣言されたコンストラクタのない非共用体クラスの型である場合、Tのすべての非静的 データ・メンバーおよび基本クラス・コンポーネントが値で初期化されます。
- Tが配列型の場合、各要素は値で初期化されます。
- そうでなければ、オブジェクトが

型Tのオブジェクトゼロ初期化にゼロに初期化される手段:

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

注:太字のテキストは私によって強調されています。

+0

そして、 'int'の値の初期化が' 0'に初期化されることを覚えている別の段落があります。 – juanchopanza

+0

@juanchopanza:上記の標準引用符の太字のテキストに従えば、それはどのようになっているのでしょうか。 –

+0

私はコメントを書いたとき、そこにテキストがないことを知っています。私は最近、 '{}'初期化を解明しようとしているC++ 11でこれを調べました。 – juanchopanza

0

はい、デフォルトの初期化時には、組み込み型は常に0に初期化されます。ビルトインタイプのほとんどのシナリオでそう、これは必ずしも0をプリントアウトしません初期化されていませんデフォルトであることに留意してください:[?ビルトインください種類のデフォルトコンストラクタを持っている]

int i; 
std::cout << i << "\n"; 
関連する問題