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