writeln wipes contents of variables ?

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 21 17:49:58 PST 2016


On 22.01.2016 01:49, W.J. wrote:
> How can I identify those ranges, or, how can I tell if any particular
> range has value semantics ? I didn't read any of this in the manual -
> not that I could remember anyways.

Generally you shouldn't. If you care about it either way, use .save or 
std.range.refRange.

If you don't want some range r to be consumed by some operation, pass 
r.save instead of plain r. If you want r to be consumed, pass 
refRange(&r). Only if you don't care if r is consumed or not, should you 
pass simply r.

If you know for a fact that copying r is the same as r.save, then you 
can just pass (and copy) r, of course. We know it's that way with 
dynamic arrays, because of their nature as pointer+length structures. 
But there's nothing wrong with calling .save on an array anyway.

Also, when a function takes a range via a ref parameter, then you don't 
need refRange, of course. The ref parameter ensures that no copy is made 
and that the original range is affected by the function.


More information about the Digitalmars-d-learn mailing list