int a = int();
必然的に私にゼロを与えますか?
、、、またはポインタ型にint
置き換えられた場合はどうでしょうか。char
double
bool
これは言語標準のどこで指定されていますか?
int a = int();
必然的に私にゼロを与えますか?
、、、またはポインタ型にint
置き換えられた場合はどうでしょうか。char
double
bool
これは言語標準のどこで指定されていますか?
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が参照型の場合、初期化は実行されません。
注:太字のテキストは私が強調しています。
はい、デフォルトで初期化されると、組み込み型は常にゼロに初期化されます。ほとんどのシナリオでは、組み込み型はデフォルトで初期化されていないため、必ずしも出力されないことに注意して0
ください。
int i;
std::cout << i << "\n";