正文

回到顶部

1.自我赋值是如何发生的

当一个对象委派给自己的时候,自我赋值就会发生:

平面设计培训,网页设计培训,美工培训,游戏开发,动画培训

1 class Widget { ... };2 3 Widget w;4 5 ...6 7 w = w; // assignment to self、

平面设计培训,网页设计培训,美工培训,游戏开发,动画培训

这看上去是愚蠢的,但这是合法的,所以请放心,客户端是可以这么做的。此外,自身赋值也并不总是很容易的能够被辨别出来。举个例子:

1 a[i] = a[j]; // potential assignment to self

上面的代码在i和j相等的情况下就是自我赋值,同样的,看下面的例子:

*px = *py; // potential assignment to self

如果px和py恰巧指向同一个东西,那么上面的语句就是自身赋值。这些并不怎么明显的自我赋值是使用别名的结果:也就是使用不止一种方法来指向同一个对象。一般情况下,当我们操作指向不同同类型对象的引用和指针时,需要考虑这些不同的对象是否是同一个对象。事实上,如果两个对象来自同一个继承体系,这两个对象甚至不必声明为同类型的,因为基类的指针或者引用可以指向派生类对象:

网友评论