功能参数之间的差异

时间:2012-03-09 03:36:25

标签: c++ templates

在函数的参数中,我想传递一个作为函数模板的默认参数。我想破译的是下面函数中(* cmp)或(cmp)之间的区别:

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

我习惯看到*作为指针声明......这是一个指向函数FunctTemplate的指针吗?为什么程序看起来无论我写的方式如何(astrik或no astrik)?

1 个答案:

答案 0 :(得分:3)

类型不一样,但在函数声明中用作参数类型时没有区别。

int (*cmp)(Type, Type)中,cmp具有指针到函数类型(或“函数指针”类型)。

int (cmp)(Type, Type)中,cmp具有函数类型(即,它根本不是指针类型)。

但是,C和C ++都有一个规则,即任何具有函数类型的参数都会隐式转换为相应的函数指针类型,就像任何具有数组类型的参数被隐式转换为相应的指针类型一样。