正文
1.自我賦值是如何發(fā)生的
當一個對象委派給自己的時候,自我賦值就會發(fā)生:
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恰巧指向同一個東西,那么上面的語句就是自身賦值。這些并不怎么明顯的自我賦值是使用別名的結(jié)果:也就是使用不止一種方法來指向同一個對象。一般情況下,當我們操作指向不同同類型對象的引用和指針時,需要考慮這些不同的對象是否是同一個對象。事實上,如果兩個對象來自同一個繼承體系,這兩個對象甚至不必聲明為同類型的,因為基類的指針或者引用可以指向派生類對象:
網(wǎng)友評論