Why use .init for associative arrays?

Chris Nicholson-Sauls ibisbasenji at gmail.com
Tue Jul 10 20:23:27 PDT 2007


Gilles G. wrote:
> Hello,
> I am just wondering why we should use init for associative arrays of structs. See this code for example:
>     struct S
>     {
>         int nb;
>     }
>     void main()
>     {
>         S[char[]] aa; // associative array of struct S
>         aa["this_is_good"] = S.init;
>         aa["this_is_good"].nb = 1;      // all right
>         aa["this_is_an_error"].nb = 1; // runtime error, compiles fine...
>     }
> 
> I can't see a use case for _not_ using init before accessing a new key, so why do we have to explicitely use S.init?
> Why does this code compile fine (it gives an access violation error at runtime), shouldn't it always give an error?
> 
> Regards.
> 
> --
> Gilles
> 

I would say this is because, until /assigned to/, AA pairs "don't 
exist."  Since the member-access of the dot operator occurs "before" the 
member-assignment, there is an attempt to dereference null.  The `= 
S.init` idiom is just a convenient way to insert the new AA value.

-- Chris Nicholson-Sauls


More information about the Digitalmars-d-learn mailing list