On 02.06.19 04:22, David Zhang wrote:
On Saturday, 1 June 2019 at 13:00:50 UTC, ag0aep6g wrote:

How is setting/replacing different from modifying?


     S s;

     this() { s = ...; }

     update(S s) { this.s = s; }

     mod(int i) { s.i = i; } // illegal

Kinda like how strings can be copied and assigned to, but not modified.

The `string` itself can be modified: You can change its length, and you can make it refer to other characters. That's modifying.

You can't modify the string's characters, because the string refers to them with an `immutable(char)*` pointer. That means the pointer itself is mutable (can be modified), but the data it points to is immutable (can't be modified).

You can do the same in your struct: `const(char)* pointer;`. Then you can modify the pointer but you can't modify the data it points to.

Reply via email to