2012-03-09 102 views
1

在參數的函數中,我想傳遞一個默認參數,它是一個函數模板。我試圖破譯是在下面的函數(* CMP)或(CMP)的區別:功能參數之間的區別

template <typename Type> 
int Foo(some var, int (*cmp)(Type one, Type two) = FunctTemplate) { ... 

我看慣了*爲指針聲明......這是一個指向函數FunctTemplate?爲什麼該程序看起來工作,無論我寫它(astrik或沒有astrik)?

回答

3

類型不一樣,但在函數聲明中用作參數類型時沒有區別。

int (*cmp)(Type, Type),cmp具有指向函數類型(或「函數指針」類型)。

int (cmp)(Type, Type)cmp具有功能類型(即,它不是一個指針型的話)。

然而,C和C++兩者有具有功能類型的任何參數隱式轉換爲相應的函數指針類型,正如其具有陣列型隱式轉換爲相應的指針類型的任何參數的規則。

相關問題