Const ref and rvalues again...
martin
kinke at libero.it
Tue Nov 6 16:32:03 PST 2012
Thanks Jonathan for the detailed info. So 'auto ref' is
implemented the way I thought, by simply duplicating functions.
That is actually the only way (I can think of) to solve your
problem 'pass this argument in the most efficient way possible
(do not copy)'.
But that is not the only problem. More commonly, we want to avoid
copying lvalues for read-only parameters and therefore pass by
reference. At the same time, we want to use the same function for
rvalues - we simply can't stand having to declare temporaries
manually or having to overload functions! Since the parameter is
read-only, we couldn't care less if the argument is actually an
lvalue or an rvalue. The only thing is that a dedicated function
overload for rvalues would be slightly more efficient (for
rvalues only) since the rvalue would be accessed directly on the
stack instead of having to access it indirectly via its reference.
This problem here would be 'pass this argument as read-only in
the most efficient way possible for lvalues (do not copy) but
also allow rvalues at a slight cost (compared to a dedicated
function overload)'.
So we do not really need 'auto ref' for non-templated functions
or a new, even more confusing keyword which you, Jonathan, seem
to insist on - 'const ref' (or, more elegantly 'in ref') is all
we need. We simply want the compiler to automatically declare
rvalues passed to 'const ref' parameters as local lvalues -
problem solved for the majority of cases. For the remaining few
which care about the involved cost for rvalue arguments, allow
them to provide a function overload for rvalues (either manually
or via 'auto ref' templates) - problem solved completely in my
point of view. And that is actually exactly what the thread
starter Malte proposes (and I already pointed that out in an
earlier post).
Again hoping to be clear enough. :)
More information about the Digitalmars-d
mailing list