foreach by value iteration
Daniel Murphy
yebblies at gmail.com
Sun Feb 26 20:51:37 PST 2012
On Sunday, 26 February 2012 at 10:25:31 UTC, Jonathan M Davis
wrote:
>
> The index bit is highly debatable, as the discussion on that
> shows
> (personally, I tend to favor leaving it as-is, because it's
> useful that way),
> but regardless making either an rvalue wouldn't make any sense,
> because they
> have to be variables that you can operate on in the loop. Doing
> anything else
> would seriously break the semantics of foreach. The question is
> simply whether
> they should be actual copies so that you don't end up with them
> altering
> anything outside of the loop unless you mark them as ref or if
> the type itself
> is a reference type. The element is pretty much its own copy
> regardless,
> unless you mark it as ref, whereas the situation with the index
> is more
> complicated (as the discussion on that shows).
>
> - Jonathan M Davis
Why does making either an rvalue not make any sense?
foreach(<modifiers> var; agg)
var = 7;
Then if var is not ref, the compiler marks it as an rvalue and
gives an error if you try to modify or take the address of it.
It's pretty unlikely to happen, but it fixes the problem of
accidentally modifying a foreach index or variable. Just because
it's in a variable doesn't mean the compiler can't treat it as an
rvalue.
More information about the Digitalmars-d
mailing list