C++ 函數(shù)指針
函數(shù)指針指向的是函數(shù)而非對象,函數(shù)指針的類型由他返回的參數(shù)和形參類型共同決定,與函數(shù)名。
該函數(shù)類型為bool,比較兩個字符串的長度。我們想要聲明一個可以指向該函數(shù)的指針只需要用指針替換函數(shù)名即可。
pt指向一個函數(shù),該函數(shù)的參數(shù)是兩個const string的引用,返回值是bool。
從我們聲明的名字開始觀察,pt是一個指針,右側是形參列表,所以他是指向函數(shù)的指針,同時它的返回值是bool。
注意:這里的括號必不可少,否則pt就是一個返回值為bool指針的函數(shù)。
使用函數(shù)指針
當我們把函數(shù)名作為一個值使用時,該函數(shù)自動的轉換為指針。
此外我們還能直接使用指向函數(shù)的指針調用該函數(shù),無須提前解引用指針
在指向不同函數(shù)類型的指針間不存在轉換規(guī)則,但是我們可以為函數(shù)指針賦值為nullptr或者值為的整型常量表達式,表示他沒有指向任何函數(shù)。
重載函數(shù)的指針
當我們使用重載函數(shù)時,上下文必須清晰的界定到底該選擇哪個函數(shù)。
編譯器通過指針的類型選用哪個函數(shù),指針類型必須和重載函數(shù)中的某一個函數(shù)精確匹配
函數(shù)指針形參
與數(shù)組類似,雖然不能定義函數(shù)類型的形參,但是形參可以是指向函數(shù)的指針。
這兩個函數(shù)時等價的聲明,第三個形參看起來是函數(shù),實際上是當成指針來使用。
返回指向函數(shù)的指針
和數(shù)組類似,雖然布恩那個返回一個函數(shù),但是能返回指向函數(shù)類型的指針,然而我們必須把返回類型寫成指針形式,編譯器不會自動的將函數(shù)返回類型當成對應的指針類型處理。
要想聲明一個返回函數(shù)指針的函數(shù)最簡單的就是使用類型別名,其中我們使用類型別名將F定義為函數(shù)類型,將PF定義成指向函數(shù)類型的指針,和函數(shù)類型的形參不一樣,返回類型不會自動轉換為指針,我們必須顯式的將返回類型定為指針。
當然我們也能直接聲明f1
按照由內向外的順序閱讀這條聲明語句,f1有形參列表所以f1是個函數(shù),f1之前有個*,所以f1返回一個指針,同時指針的類型本身也包含形參列表,因此指針指向函數(shù),該函數(shù)的返回值必須是int。