ref is pointer sugar?

Pluto pluto at planets.not
Fri Aug 6 12:15:08 PDT 2010


== Quote from Jacob Carlborg (doob at me.com)'s article
> On 2010-08-06 15:33, Pluto wrote:
> > == Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
> >> On Fri, 06 Aug 2010 08:51:31 -0400, Pluto<pluto at planets.not>  wrote:
> >>> Are these equivalent?
> >>>
> >>> S s;//struct
> >>>
> >>> void f(ref S s){s.x++;}
> >>> f(s);
> >>>
> >>> void f2(S* s){(*s).x++;}
> >>> f2(&s);
> >> They are pretty much equivalent.  I think the code generated actually will
> >> be exactly the same.  However, the compiler treats ref differently than
> >> pointers.  For example, ref is allowed in the safe subset of D, and
> >> pointers are not.
> >> Note that you do not need to dereference pointers to access their
> >> pointed-to members.  i.e.:
> >> void f2(S* s){s.x++;}
> >
> > Where is this in the spec? I can't find it. Still used to ->
> http://www.digitalmars.com/d/1.0/class.html section "Fields".
And this is more generally also applicable to dereferencing pointers.
Isn't that showing a bit of a gap in the specs? (bug report?)


More information about the Digitalmars-d-learn mailing list