C語言的指針相當的靈活方便,但也相當容易出錯。許多C語言初學者,甚至C語言老鳥都很容易栽倒在C語言的指針下。但不可否認的是,指針在C語言中的位置極其重要,也許可以偏激一點的來說:沒有指針的C程序不是真正的C程序。
然而C++的指針卻常常給我一種束手束腳的感覺。C++比C語言更加強調強類型,強調類型安全,強調編譯時檢查。因此,對于C語言中最容易錯用的指針,更是不能放過:C++的指針被分成數據指針,數據成員指針,函數指針,成員函數指針,而且不能隨便相互轉換。而且這些指針的聲明格式都不一樣:
數據指針 |
T * |
成員數據指針 |
T::* |
函數指針 |
R (*)(...) |
成員函數指針 |
R (T::*)(...) |
盡管C++中仍然有萬能指針void*,但它卻屬于被批斗的對象,而且再也不能“萬能”了。它不能轉換成成員指針。
這樣一來,C++的指針就變得很尷尬:我們需要一種指針能夠指向同一類型的數據,不管這個數據是普通數據,還是成員數據;我們更需要一種指針能夠指向同一類型的函數,不管這個函數是靜態函數,還是成員函數。但是沒有,至少從現在的C++標準中,還沒有看到。
全文見 《C++指針探討 (三) 成員函數指針 》