2010-12-07 11 views

答えて

10

保証はありますか?

はい、これは保証されています。 S().iS().jの値は0になります。 ()は14882 C++標準ISO/IECからvalue initialization.(すなわちSが既定のコンストラクタユーザ定義せずにクラスであるためijがゼロに初期化される手段)

+0

うわー!!!! Thnxたくさん。 – Bollinger

+0

特に 'struct S 'に' S(){} '(無意味なユーザ定義のctor)を追加すると、' i'と 'j'は初期化されずに残されます。つまり、' assertトリガーする。 –

+0

はいいいえ[.....] –

0

を暗示:2003(E)3.6.2

を指し

静止保存期間(3.7.1)を持つオブジェクトは、他の初期設定 が実行される前に、ゼロで初期化されます(8.5)。

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

+3

静的なストレージ割り当てがあるオブジェクトは表示されません。式 'S()'は、 'assert()'のスコープにローカル**の一時オブジェクト**を作成します。 –

+0

セクション8.5の初期化の一般的なケースについて説明します。 – birryree

+0

申し訳ありません...どういうわけか私は彼がグローバル変数 –

-1

技術的には、はい。 Visual Studioのコンパイラは通常、初期化されていない変数をデバッグビルドの特定のパターンに初期化します)。これらの変数は0 に初期化されます。

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

+0

を使用していると思っています。括弧のために()。 –