'in' storage class

Funog funog at ifrance.com
Wed Sep 5 11:40:49 PDT 2007


Nathan Reed Wrote:

> Funog wrote:
> > 'in' is equivalent to final const scope.
> > I can't understand the point of making the variable 'final' if it's already 'const' ?
> > 
> 
> In D 2.0, 'final' represents 'head-const', while 'const' means 
> 'tail-const'.  This makes a difference when talking about arrays: 
> 'final' will make the array reference itself const, so you can't change 
> it to refer to a different array, while 'const' makes the contents of 
> the array const - you can change the variable to point to another array 
> or slice, but you can't edit any array through that reference.
> 
> Thanks,
> Nathan Reed



It's true for const(uint[]) or const(uint)[], but we are talking of const uint[], which forbid any change.



void testFinal(final int[] foo)
{
    foo[0] = 10;        //OK
    foo = new int[20];  //ERROR
}
void testConst(const int[] foo)
{
    foo[0] = 10;        //ERROR
    foo = new int[20];  //ERROR
}
void testFinalConst(final const int[] foo)
{
    foo[0] = 10;        //ERROR
    foo = new int[20];  //ERROR
}


So what is the difference between 'const' and 'final const' ?



More information about the Digitalmars-d-learn mailing list