On Friday, 16 October 2015 at 10:35:23 UTC, Shriramana Sharma wrote:
Hello. I still haven't wrapped my mind around the const/immutable thing yet and am still stuck in C/C++ mode. :-(

A function that takes mutable arguments cannot be called with immutable input at the call site since it does not promise to *not* mutate the input. That's of course clear.

Why can't a function that takes an immutable argument be called with a mutable input at the call site?



The contract of immutable is such that any reference to immutable data is a guarantee that no reference to the same data will modify it anywhere in the program. Passing mutable data to a function where an immutable parameter is declared would break that contract, since the data could be modified through the original reference. The compiler can take advantage of such a strict contract to make optimizations it would otherwise be unable to.

const only guarantees const data will not be modifed through a single reference, but says nothing about other references to the same data. A const parameter can accept const, immutable, and mutable arguments.

Reply via email to