const question/suggestion
Craig Black
cblack at ara.com
Mon Jun 18 09:45:33 PDT 2007
OK, didn't catch that. Thanks.
"Myron Alexander" <someone at somewhere.com> wrote in message
news:f569rr$22n9$1 at digitalmars.com...
> Craig Black wrote:
>> OK, I think I'm starting to grasp the subtle differences between const,
>> final, and invariant. It seems to me that to have three keywords is
>> unnecessary. Perhaps const and final could be merged into one?
>>
>> From my understanding, the only difference between const and final is
>> that local final fields can be initialized in a constructor, right?
>> Couldn't that just be the default behavior of a local const field? Then
>> we could get rid of final and have only two keywords. Or am I missing
>> something? IMO, two keywords is way less confusing than three.
>>
>> Another question. Since invariant data should always be invariant, does
>> it make sense to be able to cast non-invariant data to invariant? The
>> compiler will think that it is invariant when it isn't.
>>
>> -Craig
>
> Craig, const and final have two very different roles. Const ensures that
> the value referenced/pointed to by the reference/pointer cannot be
> changed. In other words, if an object reference is bound to a const
> variable, then the object is immutable when referenced via that variable.
>
> Final is different in that it prevents a variable from having another
> value bound to it. In other words, if you have a reference variable, once
> initialised, you cannot assign a new reference to the variable.
>
> Examples:
>
> SomeObject is a mutable class, IE it's value can be modified.
>
> auto mutvar = new SomeObject ();
> mutvar.changesomething() -- ok
>
> const var = new SomeObject ();
> var.changesomething() -- fails
>
> Now for final:
>
> final finvar = new SomeObject (); -- ok
> finvar.changesomething() -- ok
> ...
> finvar = new SomeObject (); -- fails
>
> Regards,
>
> Myron.
More information about the Digitalmars-d-announce
mailing list