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