const question/suggestion
Myron Alexander
someone at somewhere.com
Mon Jun 18 08:55:16 PDT 2007
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