Struct initialization has no effect or error?

mipri mipri at minimaltype.com
Wed Oct 2 18:11:35 UTC 2019


On Wednesday, 2 October 2019 at 17:54:20 UTC, H. S. Teoh wrote:
> On Wed, Oct 02, 2019 at 05:37:57PM +0000, Brett via 
> Digitalmars-d-learn wrote:
>> struct X { int a; }
>> 
>> X[1] x;
>> 
>> x[0] = {3};
>> 
>> or
>> 
>> x[0] = {a:3};
>> 
>> fails;
>
> This works:
>
> 	x[0] = X(123);
>

I'd knew I'd gotten the impression from somewhere that this was 
the
recommended way to initialize structs, but it took me a while to 
find
it.

Learning D:

   auto ms1 = MyStruct(10, 11);// struct literal
   MyStruct ms2 = {10, 11};    // C-style, not preferred
   MyStruct ms3 = {b:11, a:10};// Named initializers

   ..

   Struct literals are convenient for simple types ...
   but they only allow for direct initialization of member
   variables. If more complex initialization is required, struct
   constructors should be used.

And then the impression was probably just from every single 
example
using the first form.

https://dlang.org/spec/struct.html#static_struct_init doesn't say 
that
this is dispreferred in any way, nor does it emphasize that you 
can't
use initialization syntax to assign to an already initialized 
variable
(this is probably obvious to C types). But there are 'Best 
Practices'
notes elsewhere in the page. This section could have one of 
those, to
say to just use the constructors.



More information about the Digitalmars-d-learn mailing list