Logical const
Steven Schveighoffer
schveiguy at yahoo.com
Tue Nov 30 13:11:35 PST 2010
On Tue, 30 Nov 2010 16:05:16 -0500, Walter Bright
<newshound2 at digitalmars.com> wrote:
> Steven Schveighoffer wrote:
>> On Tue, 30 Nov 2010 15:16:04 -0500, Walter Bright
>> <newshound2 at digitalmars.com> wrote:
>>
>>> Steven Schveighoffer wrote:
>>>> The example that I gave does not seem to you like it would surprise
>>>> someone? I passed in a const object and it got modified, even though
>>>> no casts were used.
>>>
>>> No, it doesn't surprise me. Const on one object does not apply to
>>> another object.
>> So this:
>> void myfn(const(C) n)
>> {
>> assert(n.x == 1);
>> n.foo();
>> assert(n.x == 5);
>> }
>> Wouldn't be surprising to you?
>
> No. There are a lot of things a member "x" could be. The const only
> applies to the instance data.
If you read my previous code, x is instance data. I'll reiterate the
class definition:
class C
{
static C theCommonOne;
int x;
void foo() const {
theCommonOne.x = 5; // theCommonOne could be this
}
}
If you find the above unsurprising, you are in the minority. I find it
surprising, and invalid that anyone would write code this way. People
simply just don't do that normally. It's just written to demonstrate a
point that the compiler does not guarantee anything via const, it's
guaranteed by convention. The compiler simply helps you follow the
convention.
-Steve
More information about the Digitalmars-d
mailing list