正文
1.自我賦值是如何發(fā)生的
當(dāng)一個(gè)對(duì)象委派給自己的時(shí)候,自我賦值就會(huì)發(fā)生:
1 class Widget { ... };2 3 Widget w;4 5 ...6 7 w = w; // assignment to self、
這看上去是愚蠢的,但這是合法的,所以請(qǐng)放心,客戶(hù)端是可以這么做的。此外,自身賦值也并不總是很容易的能夠被辨別出來(lái)。舉個(gè)例子:
1 a[i] = a[j]; // potential assignment to self
上面的代碼在i和j相等的情況下就是自我賦值,同樣的,看下面的例子:
*px = *py; // potential assignment to self
如果px和py恰巧指向同一個(gè)東西,那么上面的語(yǔ)句就是自身賦值。這些并不怎么明顯的自我賦值是使用別名的結(jié)果:也就是使用不止一種方法來(lái)指向同一個(gè)對(duì)象。一般情況下,當(dāng)我們操作指向不同同類(lèi)型對(duì)象的引用和指針時(shí),需要考慮這些不同的對(duì)象是否是同一個(gè)對(duì)象。事實(shí)上,如果兩個(gè)對(duì)象來(lái)自同一個(gè)繼承體系,這兩個(gè)對(duì)象甚至不必聲明為同類(lèi)型的,因?yàn)榛?lèi)的指針或者引用可以指向派生類(lèi)對(duì)象:
網(wǎng)友評(píng)論