Ok, thanks. I never liked the "lvalue rvalue" names.. For example http://en.wikipedia.org/wiki/Value_%28computer_science%29
l-value, non-lvalue, rvalue, nonlvalue.. bleh. It's the same thing as when I see "mutable, non-immutable, non-mutable, immutable" sprinkled with a few tripple negatives all around in a piece of text. /non-non-rant On Mon, Sep 6, 2010 at 12:46 AM, Jonathan M Davis <jmdavisp...@gmail.com> wrote: > On Sunday 05 September 2010 15:02:10 Andrej Mitrovic wrote: >> Does this mean assigning to fields won't be an option anymore when using >> this? >> >> E.g.: >> >> class Foo >> { >> int x; >> int y; >> >> void changeXY(int x, int y) >> { >> this.x = x; >> this.y = y; >> } >> } > > No, it simply means that you won't be able to do this in a class: > > this = new MyObj(); > > > In C++, this is a const pointer to non-const data in non-const functions and a > const pointer to const data in const functions. The problem is that due to > how D > deals with const and references, you can't have this be a const reference to > non-const data. And with the current implementation, that means that you can > reassign this. Now, that's setting a local variable, so it only affects that > function and any other member functions that it calls, but it's still not a > good > thing. If this in classes becomes an rvalue semantically-speaking (regardless > of > how its done under the hood), then you won't be able to assign to it anymore. > But you should still be able to assign to anything that you get from it. > Remember that this.x is dereferencing the this reference to get at the memory > where x is. Whether you can assign to this is irrelevant for that. It's not > trying to do anything to this itself, just what it refers to. > > - Jonathan M Davis >