On Tuesday, 18 December 2012 at 18:08:18 UTC, H. S. Teoh wrote:
It's not just about whether the function mutates something or
not.
Sometimes the function counts on the data not changing, ever.
For
example, if you're implementing a library AA type, you'd want
the key to
be immutable so that whatever hash value you computed for the
bucket
will not suddenly become invalid just because the user changed
it from
underneath you:
[snip]
In this case, the key passed to .addEntry *must* be immutable.
That's
the only way to guarantee that the AA's internal structures
won't get
invalidated by outside code.
Thanks! You and Ali have presented good examples where 'ref
immutable(T|V) t|v' trumps 'ref const(T|V) t|v' and if I
understand them correctly it is for whenever the instance method
(in the case of a member function) will hold onto the argument
for later use. I'll refine my selection process accordingly.
Thanks,
Dan