The entire "its initial value could be anything" is one of the possible consequences of UB. It is not the most dire but in C and C++ it is an outcome from an UB.

Could a language define un-initialized variables as readable garbage? Sure, but that would be a different language with different semantics, and such languages can also define declaration such that

> defining a local int and getting surprised that its initial value is not always zero.

is in fact reasonable. That is what Java and Go opted to do, for instance.