What guarantees does D 'const' provide, compared to C++?

Peter Alexander peter.alexander.au at gmail.com
Sun Aug 19 13:14:49 PDT 2012


On Sunday, 19 August 2012 at 19:58:11 UTC, Era Scarecrow wrote:
> On Sunday, 19 August 2012 at 19:42:20 UTC, Peter Alexander 
> wrote:
>> On Sunday, 19 August 2012 at 19:26:58 UTC, Jesse Phillips 
>> wrote:
>>> While in context with the original question this is fine, but 
>>> I do not like this use of guarantee.
>>>
>>> What I mean is, const does provide guarantees by itself. And 
>>> it provides more than C++ because it is transitive and 
>>> modifying a const reference is undefined.
>>
>> What guarantees does const provide on its own?
>
>  If you don't circumvent the language by casting/forcing it, 
> then const (and immutable) items cannot be changed by the 
> functions called with them, nor them nor anything they contain 
> or reference.

class Foo
{
     static Foo sneaky;
     this() { sneaky = this; }
     void bar() const { sneaky.x++; }
     int x = 0;
}

const(Foo) f = new Foo();
assert(f.x == 0);
f.bar();
assert(f.x == 1);


You only have that guarantee if there are no other mutable 
references to the data. const *on its own* does not provide that 
guarantee.


More information about the Digitalmars-d mailing list