On Tuesday, 19 April 2016 at 11:43:22 UTC, Anonymouse wrote:
On Tuesday, 19 April 2016 at 10:41:05 UTC, Jeff Thompson wrote:
I want to create a mutable array of immutable objects, but the
code below gives the error shown below. It seems that "new
immutable(C)[1]" makes the entire array immutable, but it
seems I should be able to change the elements of an array of
pointers to an object even though the objects are immutable.
How to do that?
class C {
this(int x) immutable { this.x = x; }
int x;
}
void main(string[] args)
{
auto array = new immutable(C)[1];
array[0] = new immutable C(10); // Error: Cannot modify
immutable expression array[0].
}
Mind that this is akin to declaring a string
(immutable(char)[]) and trying to modify an element.
You can append, though. Or rather, make a new array/slice with
the new elements concatenated into it.
Thanks but then I'm confused as to why the following code is
allowed. It is a mutable array of immutable strings. I can modify
the array but not the elements they point to. What's so special
about a string? Why can't I do that with my own class?
void main(string[] args)
{
auto array = new string[1];
array[0] = "a";
}