2012-03-09 7 views
1

関数のパラメータでは、関数のテンプレートである既定の引数を渡します。 *ポインタの宣言として...これはへのポインタです関数のパラメータの差

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

私は見慣れています:私は何を解読しようとしていることは、以下の機能で(* CMP)または(CMP)との差であります関数FunctTemplate?なぜ私はそれを書いている方法(astrikまたはno astrik)に関係なく動作することをプログラムが見ますか?

答えて

3

型は同じではありませんが、関数宣言でパラメータ型として使用される場合は違いはありません。

int (*cmp)(Type, Type)には、cmpには、関数へのポインタ型(または "関数ポインタ"型)があります。

int (cmp)(Type, Type)では、cmpは、関数型(つまり、ポインタ型ではありません)です。

ただし、CおよびC++のどちらも、配列型を持つパラメータが暗黙的に対応するポインタ型に変換されるのと同じように、関数型を持つパラメータはすべて暗黙的に対応する関数型に変換されるという規則があります。