このコードスニペットを見てください
struct S{ int i; int j;};
int main()
{
assert(S().i == S().j) // is it guaranteed ?
}
なんで?
それは保証されていますか?
はい、保証されています。との値はS().i
にS().j
なります0
。値の初期化を()
意味します。(つまり、はユーザー定義のデフォルト コンストラクターを持たないクラスであるため、ゼロで初期化されます)i
j
S
C++ 標準 ISO/IEC 14882:2003(E) ポイント 3.6.2 より
静的ストレージ期間 (3.7.1) を持つオブジェクトは、他の初期化が行われる前にゼロで初期化されます (8.5)。
したがって、両方の変数がゼロで初期化されているため、これは有効です。
技術的には、はい。それらは 0 に初期化されます(少なくともほとんどのコンパイラの非デバッグ ビルドでは。Visual Studio のコンパイラは通常、初期化されていない変数をデバッグ ビルドの特定のパターンに初期化します)。
ただし、コード レビューに参加している場合は、変数を明示的に初期化していないと怒鳴られても驚かないでください。