struct variable initialized with void.

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 31 08:23:11 PDT 2015


On Tuesday, 31 March 2015 at 15:12:54 UTC, ref2401 wrote:
> Could anyone describe me what this initialization does, please?

It skips the initialization entirely, leaving the memory random 
instead of making it zeroes (or NaN or whatever the .init is of 
the actual type, typically zero though).

The struct members will thus be random when made with =void. 
However, it does tell the compiler that you thought about 
initializing it - you tell it you specifically want it 
uniniitalized and didn't just forget to write something.

> When do I need to use the void initialization?

Very rarely, don't use it unless you can answer this yourself.

But some possible answers would be:

1) the initialization wasted program runtime; it can be an 
optimization. Only use it in this case if you are sure it matters 
(the speed was actually a problem) and if you do initialize it 
yourself immediately afterward. Otherwise, you might be 
introducing bugs.

2) you want some kind of random data, like if you are using it to 
seed a random number. There's often better ways of doing this, 
but =void might work in some cases.

3) You are initializing a private member with default 
construction turned off. Here, "Struct s;" wouldn't compile 
because of the disabled default constructor, but you need to set 
it up anyway. So you do "Struct s = void; s.values = something;" 
- void to tell the compiler you know what you're doing, then you 
quickly initialize it to what it needs to be.  I say in a private 
member because you'd be bypassing the object's requirements this 
way, so you are responsibile for making sure the values are 
indeed valid before using the object.


More information about the Digitalmars-d-learn mailing list