string and char[]

Steven Schveighoffer schveiguy at yahoo.com
Fri Apr 8 06:13:19 PDT 2011


On Fri, 08 Apr 2011 06:44:42 -0400, Simen kjaeraas  
<simen.kjaras at gmail.com> wrote:

> On Fri, 08 Apr 2011 12:46:08 +0200, Morlan <home at valentimex.com> wrote:
>
>> It is OK if I write
>>
>>   int[char[]] asr;
>>   asr["hello"] = 10;
>>
>> but the following does not compile:
>>
>>   char[] car = "hello";
>>
>> What is the explanation for this behaviour?
>
> The first should not be allowed. It is a mistake to use non-immutable
> keys for an associative array.

int[char[]] asr;
pragma(msg, typeof(asr).stringof);

outputs:

AssociativeArray!(const(char)[],int)

So the compiler adds const to the keys, which is why it works.

Do I think this is the correct behavior?  Absolutely not.  First, it  
prevents nothing as far as modifying keys (const accepts mutable keys as  
well as const and mutable ones).  Second, I believe you should be able to  
use whatever key constancy you want.  We should just say if you do the  
wrong thing, it's undefined.  Maybe @safe code can only use immutable  
keys.  Third, if it must be illegal to have an AA with mutable keys, it  
should be an error, not silently change to const.

-Steve


More information about the Digitalmars-d mailing list