Shadowing of members

deadalnix deadalnix at gmail.com
Thu Jan 10 01:08:50 PST 2013


On Thursday, 10 January 2013 at 08:35:14 UTC, Jonathan M Davis 
wrote:
> On Thursday, January 10, 2013 09:07:49 deadalnix wrote:
>> Consider also that this is yet another inconsistency, which is 
>> a
>> bad thing in itself.
>
> What inconsistency? There's no inconsistency here. Is it that 
> you think that
> the fact that the local variable shadows the member variable is 
> an
> inconsistency? The _only_ case where variable shadowing is 
> illegal is when one
> local variable shadows another local variable, and that's 
> because you can't
> access the shadowed variable when that happens. In all other 
> cases, you can
> access the shadowed variable (be it through the this 
> pointer/reference or
> through . or by using the full import path to the variable). 
> So, if anything
> is inconsistent, it's the fact that shadowing one local 
> variable with another
> is illegal. It's legal with everything else and quite easy to 
> work around when
> it happens.
>

How many time did you find yourself in a position of where you 
say to yourself "how no, I can't access that variable anymore 
because it is shadowed !".

And, if this is really the reason, why is this forbidden ?

void foo() {
     {
         int bar;
     }
     {
         float bar;
     }
}

> Or are you arguing that something else here is an inconsistent? 
> Because I
> don't see it, and I don't know what else from this thread that 
> you could
> possibly be referring to.
>

It is sometime allowed to shadow declaration and sometime not. 
This is not very consistent. Inconsistency come always at a cost, 
so the benefit must be very real to create one.


More information about the Digitalmars-d mailing list