Why do associative arrays return from opIndexAssign by value?

TommiT tommitissari at hotmail.com
Tue Jun 18 02:18:33 PDT 2013


On Tuesday, 18 June 2013 at 09:07:31 UTC, deadalnix wrote:
> On Tuesday, 18 June 2013 at 09:03:27 UTC, TommiT wrote:
>> Associative arrays return from opIndexAssign the inserted or 
>> existing element by value. Why don't they return it by 
>> reference, which would be much more useful? Maybe not very 
>> common, but here's an example of the kind of situation where I 
>> actually would have needed it:
>>
>> int[string] values;
>>
>> foreach (string key; keys)
>> {
>>    int* ptr = key in values;
>>
>>    if (ptr == null)
>>    {
>>        // Currently cannot write this:
>>        // ptr = &(values[key] = initValueFor(key));
>>
>>        // The workaround is inefficient:
>>        values[key] = initValueFor(key);
>>        ptr = key in values;
>>    }
>>    edit(*ptr);
>> }
>
> Assignation aren't lvalues in general, so that is consistent.

I didn't see that coming. In C++ assignments are pretty 
consistently mutable lvalues. Do you know why this is so in D?


More information about the Digitalmars-d mailing list