ref is pointer sugar?

Pluto pluto at planets.not
Fri Aug 6 06:08:26 PDT 2010


== 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++;}
> >
> > If so, why is it stated that ref is very rarely used?
> > It looks like something I would use a lot with structures.
> What?  Where does it say that?  That's very wrong, ref is used
> everywhere.  If not explicitly, at least every struct member function
> passes 'this' by ref.
> -Steve
I read it on the function page of D1.
"out is rare enough, and ref even rarer, to attach the keywords to them and leave
in as the default. "
I would think out to be more rare then ref.


More information about the Digitalmars-d-learn mailing list