Walter Bright wrote:
That is a good solution, but in my experience programmers just
throw in an =0, as it is simple and fast, and they don't
normally think about NaN's.
See! Programmers just want usable default values :-P
It's too bad that ints don't have a NaN value, but
interestingly enough, valgrind does default initialize them to
some internal NaN, making it a most excellent bug detector.
I heard somewhere before there's actually an (Intel?) CPU which
supports NaN ints... but maybe that's just hearsay.
Sadly, D has to map onto imperfect hardware :-(
We do have NaN values for chars (0xFF) and pointers (the
villified 'null'). Think how many bugs the latter has exposed,
and then think of all the floating point code with no such
obvious indicator of bad initialization.
Ya, but I don't think pointers/refs and floats are comparable
because one is copy semantics and the other is not. Conceptually,
pointers are only references to data while numbers are actual
data. It makes sense that one would default to different things.
Thought if Int did have a NaN value, I'm not sure which way I
would side on this issue. I still think I would prefer having
some level of compile-time indication or my errors simply because
it saves time when you're making something.
It would be used where the static analysis is not able to
detect that the initializer is dead.
Good to know.
However, and I've seen this happen, people will satisfy the
compiler complaint by initializing the variable to any old
value (usually 0), because that value will never get used.
Later, after other things change in the code, that value
suddenly gets used, even though it may be an incorrect value
for the use.
Maybe the perfect solution is to have the compiler initialize the
value to NaN, but it also does a bit of static analysis and gives
a compiler error when it can determine your variable is being
used before being assigned for the sake of productivity.
In fact, for the sake of consistency, you could always enforce
that (compiler error) rule on every local variable, so even ints
would be required to have explicit initialization before use.
I still prefer float class members to be defaulted to a usable
value, for the sake of consistency with ints.