D's equivalent to C++'s std::move?

Ola Fosheim Grøstad via Digitalmars-d digitalmars-d at puremagic.com
Sun Feb 14 06:12:09 PST 2016


On Sunday, 14 February 2016 at 12:53:08 UTC, Lars T. Kyllingstad 
wrote:
> I know you said afterwards you didn't need a reference, but 
> I'll give you one anyway. :)  That is the formal requirement 
> for C++ standard library types; see sec. 17.6.5.15 
> [lib.types.movedfrom] of the C++ specification.

k thx. ;-) (I'll look at it later)

> For your lowest-level resource owners, I guess that is the 
> case.  But if a and b are largeish compound types that don't 
> fit in a register, that's not the case, right?  Or can the 
> optimiser deal with this in a good way too?

This is where measuring different compiler switch setups starts 
to matter, inlining and also cache effects... :-)

I don't think the size matters, for swap, except for potential 
cache misses. As long as there are no barriers you can just swap 
field after field. If the loop is tight, then the loop is 
unrolled inside the CPU before the micro-ops are scheduled into 
the pipeline IIRC.

> That is of course very unfortunate, but I guess it can be 
> worked around?

You can work around it by having extra pointers/containers in or 
held by the struct (pointers to the source that is pointing to 
you). But that takes more space.



More information about the Digitalmars-d mailing list