Is `void` the correct way to say "do not initialize this variable"?
drug007
drug2004 at bk.ru
Mon Oct 3 10:17:10 UTC 2022
On 10/3/22 09:35, tsbockman wrote:
> On Sunday, 2 October 2022 at 23:45:45 UTC, drug007 wrote:
>> It works but not as someone could expect. In case of
>> ```D
>> Foo[2] arr = void;
>> ```
>> `arr` value is not defined, it is not an initialized array of
>> uninitialized elements like you want, it is just uninitialized array.
>
> This is incorrect. It is not possible to declare an uninitialized static
> array variable in D; only the elements are affected by `= void`.
>
> The meta data of a static array like `Foo[2] arr` (`.ptr` and `.length`)
> is determined statically at compile time and inserted where needed into
> the generated code. It is not stored in mutable memory the way a dynamic
> array/slice's meta data is, and does not need to be initialized at run
> time.
>
You are right. I used to complex structure (with indirections) for
testing and made wrong statement.
> By contrast, it **is** possible to declare a completely uninitialized
> dynamic array, or to just leave its elements uninitialized:
> ```D
> // Meta data is not initialized, and no elements are allocated.
> // This has no static array equivalent:
> int[] arrA = void;
>
> // Meta data is initialized, and elements are allocated but not
> initialized.
> // This is the dynamic equivalent of the static:
> // int[2] arr = void;
> int[] arrB = uninitializedArray!(int[])(2);
> ```
More information about the Digitalmars-d-learn
mailing list