Mutable array with fixed length

Jonathan M Davis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Sep 4 21:50:13 PDT 2014


On Fri, 05 Sep 2014 00:26:07 +0000
Freddy via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com>
wrote:

> How would you create a mutable array with a fixed(compile error
> when trying to change) length.

Static arrays have a fixed length and live on the stack.

int[12] arr;

Dynamic arrays have a mutable length and the memory that they refer to
normally lives on the heap (though they can be slices of static arrays or any
two pointers).

int[] arr = new int[](12);

If the array is fully const or immutable

immutable(int[]) arr = new immutable(int[])(12);

then its length can't be mutated, whereas if the elements are const or
immutable but the array is not

const(int)[] = new const(int)[](12);

then the length can mutated but the elements cannot be. However, because const
and immutable are transitive, there is no way to have an array whose elements
are mutable but have the array itself (and thus its length) be const or
immutable.

So, to get what you want, you're probably going to have to create a wrapper
struct that forwards all of the operations that you want and doesn't expose
the ones you don't (e.g. length).

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list