On 23.03.2016 21:52, cy wrote:
const(int)[2] a = [23,24];
const(int)* b = a;

Should be: const(int)* b = a.ptr;

writeln(&a," always constant");
writeln(a, " always constant");

There's some subtlety here. `a` itself is not const, but its elements are. `a` being a fixed-sized array, you can't actually change anything when the elements are not mutable. Things would be different with a dynamic array.

writeln(a[0]," always constant");
writeln(&b," always constant");

The address of a local variable isn't exactly const/immutable in the sense of the type system, I think. It simply doesn't change during the run of the function, and afterwards it's not considered alive anymore.

writeln(b," always mutable");
writeln(*b, "constant");

Yup and yup.

b = b + 1;

Just to be 100% clear: you're adding to the pointer here, not to the value that's being pointed at. It's 24, because that's the second item in `a`.

You can also allocate a whole new int and add set it to `*b + 1`. I think that's closer to your original goal.

----
b = new int(*b + 1);
----

writeln(*b, "also constant, but a different one.");

something like that...

Reply via email to