What is the difference between...

Bruno Medeiros brunodomedeiros+spam at com.gmail
Fri Sep 7 11:48:45 PDT 2007


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;
const(int)** x;  // mutable pointer to mutable pointer to const int;


The only way to apply const to the toplevel value, is to use const as a 
"storage class" (crappy name). So:

const int* x;  // const pointer to const int

BTW, your posts are not getting threading right, could you check your 
client?

-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list