私はデフォルト-初期対値 - 初期の私の理解をリフレッシュし、this出くわした:なぜこの単純な割り当ては未定義の動作ですか?
struct C {
int x;
int y;
C() { }
};
int main() {
C c = C();
}
C(の場合は理由
どうやらこれはUBである)があり、 xおよびyメンバーを初期化することができるコンストラクタです。初期化は行われません。 C()をcにコピーしようとすると、未定義の動作が発生します。
私は理由を理解していると思いますが、私は確信していません。誰かが詳しく説明できますか?
これもUBですか?
int x; x = x;
ちなみに、値の初期化に関しては、ゼロが保証されていますか?
int x = int();
あなたは何を意味するのかよく分かりません。 xとyの値が初期化されていない場合はyesになりますが、コンストラクタがそれをしていないので、あなた自身の質問に答えています。 C c = C();私はそれが完全に有効だと思う。 – Sid
誰かがそうでないと主張するまで、私はそれも完全に有効であると思った。私が読んでいるように、最初のスニペットはUBによってのみ可能で、2番目のスニペットもそうでなければ単純な初期化されていない値で、鼻のデーモンはありません。 – spraff
@Sid:いいえ、初期化されていないオブジェクトの値を使用すると、未定義の動作が発生します。 –