xvalue and std::move in D

Mike Parker aldacron at gmail.com
Thu Mar 6 06:28:55 PST 2014


On 3/6/2014 9:38 PM, Edwin van Leeuwen wrote:

> I guess what I am trying to do is allow code that looks like this:
>
> v = add_to_vector( x, v );
>
> while enforcing that v is never copied. I know there are other ways to
> do this, i.e.
> void add_to_vector( x, ref v );
>
> but for me the earlier pattern is more explicit about what is happening,
> while still being as efficient.
>

import std.stdio;

struct Foo {
     int x, y;
}

Foo add( Foo f, int val ) {
     writefln( "By val verision" );
     return Foo( f.x + val, f.y + val );
}

Foo add( ref Foo f, int val ) {
     writefln( "Ref version" );
     return Foo( f.x + val, f.y + val );
}

void main() {
     Foo f1 = Foo( 1, 2 );
     Foo f2 = add( f1, 1 ); // by ref version

     import std.algorithm : move;
     Foo f3 = add( f2.move, 4 ); // by val version, no copy

     // First is by ref, second is by val with no copy
     Foo f4 = f3.add( 2 ).add( 5 );
}


More information about the Digitalmars-d-learn mailing list