string and char[]
spir
denis.spir at gmail.com
Fri Apr 8 11:57:52 PDT 2011
On 04/08/2011 03:13 PM, Steven Schveighoffer wrote:
> 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.
I agree on points 1 & 3. "Second" looks dangerous to me.
Denis
--
_________________
vita es estrany
spir.wikidot.com
More information about the Digitalmars-d
mailing list