3d vector struct

Stanislav Blinov stanislav.blinov at gmail.com
Mon Feb 3 14:01:14 PST 2014


On Monday, 3 February 2014 at 20:10:59 UTC, Brenton wrote:

> 4) Is it advisable for the cross method to return by value?  In 
> C++, I would declare this method as inline and in a header 
> file.  Can I trust D to inline away this inefficiency?  Perhaps 
> I should pass in the result as a "ref" or "out" parameter 
> (although I don't require the vector to be initialized here)?  
> Is there a more efficient way to do this?

Seeing as previous responses skipped over this point:

Yes, return by value. The compiler will optimize that for you by 
moving (not copying) the result. Return-by-value (and 
optimizations involved) is one of the stronger things in D that 
IIRC was there even before e.g. C++11 with its move semantics. 
Performing a move means that it is absolutely possible for clever 
compiler to even construct the value in-place, but I'm not sure 
if any of existing D compilers do that as of yet.

Return-by-value being optimized as a move might be one more 
reason why you would like to use slices instead of variables to 
store coordinates (since that would mean just moving a pointer 
and a size_t), but that might have to wait until custom 
allocators finally arrive.


More information about the Digitalmars-d-learn mailing list