Constructor params with same name as members
Jonathan M Davis via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Oct 23 13:56:51 PDT 2014
On Thursday, 23 October 2014 at 18:57:33 UTC, Ali Çehreli wrote:
> On 10/22/2014 11:37 PM, Jonathan M Davis wrote:
>
> > x = x;
> >
> > which is so obviously wrong that I don't know how much of
> anyone could
> > make that mistake. But simply making it illegal to assign a
> variable to
> > itself would solve that problem, and that arguably should be
> done, since
> > it's a essentially a no-op.
>
> Steve said the same thing and it's true for fundamental types
> but just to annoy you two, assignment can have side effects. :)
>
> import std.stdio;
>
> struct X
> {
> X opAssign(X that)
> {
> writeln("side-effect!");
> return this;
> }
> }
>
> void main()
> {
> auto x = X();
> x = x;
> }
LOL. Yeah. In that case, it wouldn't be a no-op and shouldn't be
an error, but in any assignment where the operator wasn't
overloaded by that type or any of its member variables (directly
or indirectly), it _is_ a no-op and should arguably result in an
error.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list