Thread overview | |||||
---|---|---|---|---|---|
|
April 24, 2009 *this | ||||
---|---|---|---|---|
| ||||
Looking at Don Clugston's BigInt code I see usage of "*this": BigInt opMulAssign(T: BigInt)(T y) { *this = mulInternal(*this, y); return *this; } I think I know what it does (passes this by reference) but I can't find any documentation that explains the usage. Can anyone point me to a source?? Paul |
April 24, 2009 Re: *this | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul D. Anderson | Paul D. Anderson wrote:
> Looking at Don Clugston's BigInt code I see usage of "*this":
>
> BigInt opMulAssign(T: BigInt)(T y) {
> *this = mulInternal(*this, y);
> return *this;
> }
>
> I think I know what it does (passes this by reference) but I can't find any documentation that explains the usage. Can anyone point me to a source??
>
> Paul
>
>
It's passing by value, since BigInt is a struct, not a class. 'this' is a pointer to the struct, so *this is the struct itself. In the case of BigInt, the struct only contains an bool and a dynamic array, for a total of 10 bytes or so, so it's not much bigger than a pointer.
I believe the behaviour of 'this' in structs changed recently (but probably only in D2?) The BigInt wrapper class would be a bit different in D2.
BTW BigInt uses structs, not classes, and part of the reason for this is that you _cannot_ have value semantics with a class.
|
April 24, 2009 Re: *this | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don | Don Wrote:
> Paul D. Anderson wrote:
> > Looking at Don Clugston's BigInt code I see usage of "*this":
> >
> > BigInt opMulAssign(T: BigInt)(T y) {
> > *this = mulInternal(*this, y);
> > return *this;
> > }
> >
> > I think I know what it does (passes this by reference) but I can't find any documentation that explains the usage. Can anyone point me to a source??
> >
> > Paul
> >
> >
> It's passing by value, since BigInt is a struct, not a class. 'this' is a pointer to the struct, so *this is the struct itself. In the case of BigInt, the struct only contains an bool and a dynamic array, for a total of 10 bytes or so, so it's not much bigger than a pointer.
>
> I believe the behaviour of 'this' in structs changed recently (but probably only in D2?) The BigInt wrapper class would be a bit different in D2.
>
> BTW BigInt uses structs, not classes, and part of the reason for this is that you _cannot_ have value semantics with a class.
>
Thanks, Don.
Paul
|
Copyright © 1999-2021 by the D Language Foundation