7

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

、、、またはポインタ型にint置き換えられた場合はどうでしょうか。chardoublebool

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

4

2 に答える 2

17

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

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

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

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

C ++ 03:8.5イニシャライザー
パラ7:

初期化子が空の括弧のセット、つまり()であるオブジェクトは、値で初期化されます。

値の初期化とゼロの初期化は、8.5Para5で次のように定義されています。

タイプTのオブジェクト を値初期化するということは、次のことを意味します。

— Tがユーザー宣言コンストラクター(12.1)を持つクラスタイプ(9節)の場合、Tのデフォルトコンストラクターが呼び出されます(Tにアクセス可能なデフォルトコンストラクターがない場合、初期化は不正な形式になります)。
— Tがユーザー宣言コンストラクターのない非ユニオンクラスタイプである場合、Tのすべての非静的データメンバーと基本クラスコンポーネントは値で初期化されます。
— Tが配列型の場合、各要素は値で初期化されます。
それ以外の場合、オブジェクトはゼロで初期化されます

タイプTのオブジェクトをゼロ初期化するということは、次のことを意味します。

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

注:太字のテキストは私が強調しています。

于 2012-04-11T06:12:50.107 に答える
0

はい、デフォルトで初期化されると、組み込み型は常にゼロに初期化されます。ほとんどのシナリオでは、組み込み型はデフォルトで初期化されていないため、必ずしも出力されないことに注意して0ください。

int i;
std::cout << i << "\n";
于 2012-04-11T06:13:38.593 に答える