7

このコードスニペットを見てください

struct S{ int i; int j;};

int main()
{
   assert(S().i ==  S().j) // is it guaranteed ?
}

なんで?

4

3 に答える 3

10

それは保証されていますか?

はい、保証されています。との値はS().iS().jなります0値の初期化を()意味します。(つまり、はユーザー定義のデフォルト コンストラクターを持たないクラスであるため、ゼロで初期化されます)ijS

于 2010-12-07T16:12:11.490 に答える
0

C++ 標準 ISO/IEC 14882:2003(E) ポイント 3.6.2 より

静的ストレージ期間 (3.7.1) を持つオブジェクトは、他の初期化が行われる前にゼロで初期化されます (8.5)。

したがって、両方の変数がゼロで初期化されているため、これは有効です。

于 2010-12-07T16:48:39.273 に答える
-1

技術的には、はい。それらは 0 に初期化されます(少なくともほとんどのコンパイラの非デバッグ ビルドでは。Visual Studio のコンパイラは通常、初期化されていない変数をデバッグ ビルドの特定のパターンに初期化します)

ただし、コード レビューに参加している場合は、変数を明示的に初期化していないと怒鳴られても驚かないでください。

于 2010-12-07T17:17:18.043 に答える