C語(yǔ)言的指針相當(dāng)?shù)撵`活方便,但也相當(dāng)容易出錯(cuò)。許多C語(yǔ)言初學(xué)者,甚至C語(yǔ)言老鳥(niǎo)都很容易栽倒在C語(yǔ)言的指針下。但不可否認(rèn)的是,指針在C語(yǔ)言中的位置極其重要,也許可以偏激一點(diǎn)的來(lái)說(shuō):沒(méi)有指針的C程序不是真正的C程序。
然而C++的指針卻常常給我一種束手束腳的感覺(jué)。C++比C語(yǔ)言更加強(qiáng)調(diào)強(qiáng)類(lèi)型,強(qiáng)調(diào)類(lèi)型安全,強(qiáng)調(diào)編譯時(shí)檢查。因此,對(duì)于C語(yǔ)言中最容易錯(cuò)用的指針,更是不能放過(guò):C++的指針被分成數(shù)據(jù)指針,數(shù)據(jù)成員指針,函數(shù)指針,成員函數(shù)指針,而且不能隨便相互轉(zhuǎn)換。而且這些指針的聲明格式都不一樣:
數(shù)據(jù)指針 |
T * |
成員數(shù)據(jù)指針 |
T::* |
函數(shù)指針 |
R (*)(...) |
成員函數(shù)指針 |
R (T::*)(...) |
盡管C++中仍然有萬(wàn)能指針void*,但它卻屬于被批斗的對(duì)象,而且再也不能“萬(wàn)能”了。它不能轉(zhuǎn)換成成員指針。
這樣一來(lái),C++的指針就變得很尷尬:我們需要一種指針能夠指向同一類(lèi)型的數(shù)據(jù),不管這個(gè)數(shù)據(jù)是普通數(shù)據(jù),還是成員數(shù)據(jù);我們更需要一種指針能夠指向同一類(lèi)型的函數(shù),不管這個(gè)函數(shù)是靜態(tài)函數(shù),還是成員函數(shù)。但是沒(méi)有,至少?gòu)默F(xiàn)在的C++標(biāo)準(zhǔn)中,還沒(méi)有看到。
全文見(jiàn) 《C++指針探討 (三) 成員函數(shù)指針 》