What is the difference between...

Sean Kelly sean at f4.ca
Fri Sep 7 12:16:04 PDT 2007


Bruno Medeiros wrote:
> Sean Kelly wrote:
>> Bruno Medeiros wrote:
>>> Janice Caron wrote:
>>>> -----Original Message-----
>>>> From: digitalmars-d-bounces at puremagic.com 
>>>> [mailto:digitalmars-d-bounces at puremagic.com] On Behalf Of Daniel919
>>>> Sent: 07 September 2007 12:39
>>>> To: digitalmars-d at puremagic.com
>>>> Subject: Re: What is the difference between...
>>>>
>>>>> > (2) void f(const(int) x)
>>>>> Useless, like all: const/invariant(simplestoragetype)
>>>>
>>>> It is? Why? Why doesn't it mean x is a const int?
>>>>
>>>> So f(const(int)* x) means x is a pointer to const int, but 
>>>> f(const(int) x) does not mean x is a const int? Now I'm very, very 
>>>> confused.
>>>>
>>>> Why am I not getting this?
>>>>
>>>
>>> const(...) makes everything inside the parenthesis const. But there 
>>> is one exception: If that const is part of a declaration, then the 
>>> top-level value/type is not const. (the top-level value is the one 
>>> that changes with assignments) So:
>>>
>>> const(int)* x;  // mutable pointer to const int
>>> const(int)  x;  // mutable int;
>>> const(int*) x;  // mutable pointer to const int
>>> const(int**) x;  // mutable pointer to const pointer to const int;
>>> const(int*)* x;  // mutable pointer to const pointer to const int;
>>
>> Wouldn't this be "mutable pointer to mutable pointer to const int?"
>>
>>
>> Sean
> 
> The last one :
>   const(int*)* x;
> ?
> 
> Nope, it's like I said.

So the "top-level value/type" rule you mention above applies to the 
entire type rather than just the bit in parenthesis?  Then there is 
effectively no difference between "const(int**) x" and "const(int*)*" 
correct?  So why are both syntaxes accepted?


Sean



More information about the Digitalmars-d mailing list