正文

回到頂部

1.自我賦值是如何發(fā)生的

當(dāng)一個(gè)對(duì)象委派給自己的時(shí)候,自我賦值就會(huì)發(fā)生:

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

這看上去是愚蠢的,但這是合法的,所以請(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)論