An alternative to .init
JAnderson
ask at me.com
Tue Sep 9 22:44:33 PDT 2008
Benji Smith wrote:
> Walter Bright wrote:
>> Andrei Alexandrescu wrote:
>>> I hear you. I brought up the same exact design briefly with Bartosz
>>> last week. We called it T.invalid. He argued in favor of it. I
>>> thought it brings more complication than it's worth and was willing
>>> to go with T.init for simplicity's sake. Why deal with two empty
>>> states instead of one.
>>>
>>> One nagging question is, what is T.fail for integral types? For
>>> pointers fine, one could be found. For chars, fine too. But for
>>> integrals I'm not sure that e.g. T.min or T.max is a credible fail
>>> value.
>>
>> The T.init value should be that. That's why, for floats, float.init is
>> a NaN. But for many types, there is no such thing as an invalid value,
>> so it really doesn't work for generic code.
>
> I don't think values necessarily have to be initialized to an invalid
> value. You could certainly argue that NaN values are valid results of
> certain computations, and that they're valid in certain contexts.
>
> The important thing is that they're *uncommon*, and if you see them
> cropping up all over the place where they shouldn't, you know you have
> an initialization problem somewhere in your code.
>
> The same thing could be true for integers, but zero is such a common
> value that it's tough to spot the origin of the error.
>
> If signed integers were initialized to min_value and signed integers
> were initialized to max_value, I think those initialization errors would
> be easier to track down. Not because the values are illegal, but because
> they're *uncommon*.
>
> --benji
I agree. I use the 0xcdcdcdcd and 0xfefefefe provided by MSVC a lot to
track down errors.
-Jowl
More information about the Digitalmars-d-announce
mailing list