函數(shù)指針指向的是函數(shù)而非對(duì)象。和其它指針一樣,函數(shù)指針指向某種特定類型匠楚。
函數(shù)的類型由它的返回類型和形參類型共同決定,與函數(shù)名無關(guān)卫病。
(*pf)兩端的括號(hào)必不可少油啤。否則 pf 是一個(gè)返回值為 bool 指針的函數(shù)。
當(dāng)把函數(shù)名作為一個(gè)值使用時(shí)蟀苛,該函數(shù)自動(dòng)地轉(zhuǎn)換成指針益咬。
在指向不同函數(shù)類型的指針間不存在轉(zhuǎn)換規(guī)則。但可以為函數(shù)指針賦一個(gè) nullptr 或者值為 0 的整形常量表達(dá)式帜平,表示該指針沒有指向任何一個(gè)函數(shù)幽告。
重載函數(shù)時(shí),上下文必須清晰地界定到底應(yīng)該選用哪個(gè)函數(shù)裆甩。
和數(shù)組類似冗锁,雖然不能定義函數(shù)類型的形參,但時(shí)形參可以是指向函數(shù)的指針嗤栓。形參看起來時(shí)函數(shù)類型冻河,實(shí)際上卻是當(dāng)成指針使用。
也可以把函數(shù)直接作為實(shí)參使用茉帅,此時(shí)它會(huì)自動(dòng)轉(zhuǎn)換成指針叨叙。
和數(shù)組類似,雖然不能返回一個(gè)函數(shù)堪澎,但是能返回指向函數(shù)類型的指針擂错。編譯器不會(huì)自動(dòng)地將函數(shù)返回類型單程對(duì)應(yīng)的指針類型處理,須把返回類型寫成指針形式樱蛤。
int (*f1(int))(int*,int);
按照由內(nèi)向外的方式閱讀钮呀,f1 有形參列表剑鞍,所以 f1 是個(gè)函數(shù);f1 前面有 * 爽醋,所以 f1 返回一個(gè)指針蚁署;指針的類型本身也包含形參列表,因此指針指向函數(shù)子房,該函數(shù)的返回類型是 int形用。
如果我們明確知道返回的函數(shù)是哪一個(gè),就能使用 decltype 簡化書寫函數(shù)指針返回類型的過程证杭。