meaning of "auto ref const"?
Picaud Vincent via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Dec 20 13:59:47 PST 2016
On Tuesday, 20 December 2016 at 20:08:32 UTC, Ali Çehreli wrote:
> If the purpose is optimization, the good news are
Yes it is :)
> * Classes are already reference types so there is no lvalue or
> rvalue reference distinction there
Ok, this one is quite intuitive.
> import std.stdio;
> ...
Thank you for the illustrative example, I have reproduced it.
> There is a surprising difference in D:
>
> In D, non-constness of an object seems to be more important in
> overload resolution: Notice how mutable lvalue above is passed
> to by-copy instead of the potentially-more-optimal by-const-ref
> above. D realizes that a mutable object is for mutation and
> because by-const-ref cannot mutate it, D passes it to the
> by-copy function. (This may be seen as a bug by some.)
Thank you for pointing out this. I was not aware of that, and for
sure this is not the C++ behavior.
> Interestingly, enabling the by-mutable-ref overload above, now
> the mutable object goes to by-ref and there is no automatic
> copy:
Ok, that is "moral" and without surprise.
> --- rvalue ---
> constructor 1
> foo(by-copy) 1
> destructor for 1
>
> --- mutable lvalue ---
> constructor 2
> foo(by-ref) 2
> destructor for 2
>
> --- const lvalue ---
> constructor 3
> foo(by-ref-const) 3
> destructor for 3
>
> Ali
>
> [1] I have an issue with "rvalue reference" as rvalue
> references can be references to lvalues as well. :p
Thank you for your time and these valuable explanations, I learnt
a lot.
--Vincent
More information about the Digitalmars-d-learn
mailing list