automatic int to short conversion - the HELL?

Ary Borenszweig ary at esperanto.org.ar
Thu Sep 18 12:05:46 PDT 2008


Chris R. Miller wrote:
> downs wrote:
>> Chris R. Miller wrote:
>>> downs wrote:
>>>> Jarrett Billingsley wrote:
>>>>> On Wed, Sep 17, 2008 at 10:26 PM, downs <default_357-line at yahoo.de>
>>>>> wrote:
>>>>>> void main() { int i; short x; x = i; }
>>>>>>
>>>>>> Excuse me, but - how exactly is it that this is in any way, shape or
>>>>>> form valid code?
>>>>>>
>>>>>> How can I trust a language that allows those kind of shenanigans?
>>>>>>
>>>>> lern2warningsflag.
>>>> "Warning. Your code is broken."
>>>>
>>>> I still claim it should actually be an error, although the only
>>>> practical and correct solution might be full ranged type support.
>>> I don't get it.  Why can that not be simple implicit type casting?
>>
>> Because short is not a superset of int.
> 
> Well.... then it's just a loss of precision warning like on every other 
> language (Java and C++ off the top of my head).
> 
> -w and be on thy way, unless I'm missing something else.

No, no. In Java it's an error, an explicit cast is required.

http://www.programmersheaven.com/2/FAQ-JAVA-Type-Conversion-Casting

Which is perfect. It expresses the intents of the programmer:

long x = ...;
int y = (int) x; // yes, I know I might loose information, but I'm sure 

                  // it won't happen

However, if you see this code (in D):

long x = ...;
int y = x;

you start wondering whether the original author simply forgot to add the 
cast or he knew what he was doing. How can you know?

I like the compiler to force you to write an explicit cast. It is 
saying: "Hey, please tell me you know what you are doing here... because 
maybe you didn't notice you might loose information here".


More information about the Digitalmars-d-learn mailing list