Empty Array is Null?

torhu no at spam.invalid
Wed Mar 19 15:27:58 PDT 2008


Frits van Bommel wrote:
> BCS wrote:
>> Steven Schveighoffer wrote:
>>>
>>> Now, here is the weird part.  The compiler does some magic with 
>>> arrays.  If you are comparing an array with null, it changes the code 
>>> to actually just compare the array pointer to null.  So, the the 
>>> following code:
>>>
>> 
>> no this is the weird part:
>> 
>> IIRC this passes.
>> 
>> char* cp = cast(char*)null;
>> char[] ca = ap[0..15];
>> assert(ca.ptr == null && ca.length == 15);
> 
> It does with DMD, if you s/ap/cp/, but I'm pretty sure what you're doing 
> is invoking undefined behavior. Or at least it should be, but I can't 
> seem to find any mention of it in the spec...

Can't see why that would be undefined.  It's pretty clear what it means.

Perhaps it should be an error when the compiler detects that you're 
setting .ptr to null but .length to nonzero.  But the compiler can't be 
expected to detect that in the general case, so it would be of limited 
usefulness.  A bit like disallowing comparing objects to 'null' with ==.


More information about the Digitalmars-d-learn mailing list