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
>

Reply via email to