rvalues -> ref (yup... again!)

Rubn where at is.this
Mon Mar 26 23:21:16 UTC 2018


On Monday, 26 March 2018 at 22:48:38 UTC, Walter Bright wrote:
> On 3/26/2018 12:24 PM, Manu wrote:
>> On 26 March 2018 at 07:40, Atila Neves via Digitalmars-d
>>> C++ const T& -> D T
>> 
>> Yeah, no... T may be big. Copying a large thing sucks. Memory 
>> copying
>> is the slowest thing computers can do.
>> As an API author, exactly as in C++, you will make a judgement 
>> on a
>> case-by-case basis on this matter. It may be by-value, it may 
>> be by
>> const-ref. It depends on a bunch of things, and they are 
>> points for
>> consideration by the API author, not the user.
>
> Copying does suck, I agree. Consider the following:
>
>     void foo(T t) { foo(t); } <= add this overload
>     void foo(ref T t) { ... }
>     T aaa();
>
>     foo(aaa());
>
> With inlining, I suspect we can get the compiler to not make 
> any extra copies. It's not that different from NRVO. And as a 
> marvy bonus, no weird semantic problems (as Atila mentioned).

How do you add this overload for the following?


void foo(ref T t) { ... }

void function(ref int) func = &foo;
int aaa();

func(aaa()); // err





More information about the Digitalmars-d mailing list