s.secondがint()によって初期化されるためですが、int()が0であると述べられている標準の行を見つけることができません。
C ++ 11標準でたどる必要のあるパスは次のとおりです。この回答では、現在の公式標準よりも新しいドラフトn3485を参照として使用しています。
C++11規格の8.5/11項によると:
初期化子が空の括弧のセット、つまり()であるオブジェクトは、値で初期化されます。[...]
さらに、C++11規格の8.5/8項によると:
タイプTのオブジェクトを値初期化するということは、次のことを意味します。
— Tが(おそらくcv修飾された)クラスタイプ(第9節)であり、デフォルトコンストラクター(12.1)がないか、ユーザー提供または削除されたデフォルトコンストラクターがある場合、オブジェクトはデフォルトで初期化されます。
— Tが(おそらくcv修飾された)非ユニオンクラスタイプであり、ユーザーが提供または削除したデフォルトコンストラクターがない場合、オブジェクトはゼロで初期化され、Tに重要なデフォルトコンストラクターがある場合は、デフォルトで初期化されます。
— Tが配列型の場合、各要素は値で初期化されます。
—それ以外の場合、オブジェクトはゼロで初期化されます。
最後に(これは非常に直感的ですが)、8.5 /6項によると:
タイプTのオブジェクトまたは参照をゼロで初期化するということは、次のことを意味します。
— Tがスカラー型(3.9)の場合、オブジェクトは値0(ゼロ)に設定され、積分定数式と見なされ、Tに変換されます。
— [...]