首先看了常用的寫法:
是的,你可能就此以為函數指針在調用的時候,是否解引用都無所謂了吧?我跟你想得一樣,是的,這是對的,但是注意我前面的用詞“函數指針在調用的時候,是否解引用都無所謂”,那麼還可能在什麼情況下使用函數指針呢?沒錯,就是“使用模板傳遞函數類型”的時候!
來看下面一個例子:
int(char)是使用模板傳遞函數類型,c(fi)給C的構造函數傳遞函數指針fi,對fi的調用,可以使用_t('a')和(*_t)('a')兩種方式(當然,你也可以在main函數中使用fi('a')和(*fi)('a')調用函數fi),但是對於int(char)類型的變量t2,卻無法復制構造,只能使用指針賦值方式。
在對int(char)函數類型變量賦值時,它表現得像是一個函數常量(就像函數名f1一樣),而如果對其指針的引用賦值時,它表現得像typedef int(*const constPF)(char)一樣。所以,它更像是一個“constructor、copy constructor和operator=”都為private的class,即無法創建它的實例、無法對它的實例初始化或賦值。只能對它的指針進行初始化和賦值然後使用。