ref is pointer sugar?

Steven Schveighoffer schveiguy at yahoo.com
Fri Aug 6 05:56:21 PDT 2010


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


More information about the Digitalmars-d-learn mailing list