Ref parameter: intended behavior or bug?
Frits van Bommel
fvbommel at REMwOVExCAPSs.nl
Wed Aug 22 03:26:03 PDT 2007
Mike Parker wrote:
> Bill Baxter wrote:
>> 'ref' is not a type constructor in D, it is a storage class.
>> .sizeof gives the size of the type. The storage class shouldn't
>> affect that.
>
> But it's a bit inconsistent, is it not? Consider this function:
>
> void structPtr(MyStruct* ms)
> {
> writefln("Struct ptr: %d", ms.sizeof);
> }
>
> This will print 4. Why should the behavior of 'ref' be any different
> than that of '*'? If I want the size of the type, I would use
> MyStruct.sizeof.
Because 'ref' also adds extra '*'s in front of every place the variable
occurs, so your code with 'ref' is more like
-----
void structPtr(ref MyStruct ms)
{
writefln("Struct ptr: %d", (*ms).sizeof);
}
-----
so you print the size of the struct referred to, not the size of the
reference itself.
More information about the Digitalmars-d-learn
mailing list