Destructors, const structs, and opEquals
Steven Schveighoffer
schveiguy at yahoo.com
Mon Dec 6 05:34:20 PST 2010
On Sun, 05 Dec 2010 09:18:13 -0500, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> On 12/5/10 12:04 AM, Steven Schveighoffer wrote:
>> I'm totally confused. I thought the point of auto ref was to pass by
>> value if it's an rvalue (since the data is already on the stack). If
>> this is not the case, then why not just make ref work that way? Why
>> wouldn't I mark all my functions as auto ref to avoid being pestered by
>> the compiler?
>
> Because you sometimes do care about dealing with a true lvalue. Consider:
>
> void bump(ref int x) {
> ++x;
> }
>
> Then:
>
> unsigned int y;
> bump(y); // you don't want this to go through
> short z;
> bump(z); // you don't want this to go through
> int w;
> bump(w * 2); // you don't want this to go through
Right.
OK, so now I understand what you are saying, but now I don't understand
why const ref is such a mistake. Before you explained it was because when
you pass an rvalue by ref, it's much more expensive, so auto ref passes by
ref if it's an lvalue and by value if it's an rvalue. At least that's
what I understood.
With const ref, you get the same behavior, plus you are guaranteed that
the code isn't going to do something stupid (like modify a value that will
be thrown away at the end).
-Steve
More information about the Digitalmars-d
mailing list