在函数的参数中,我想传递一个作为函数模板的默认参数。我想破译的是下面函数中(* cmp)或(cmp)之间的区别:
template <typename Type>
int Foo(some var, int (*cmp)(Type one, Type two) = FunctTemplate) { ...
我习惯看到*作为指针声明......这是一个指向函数FunctTemplate的指针吗?为什么程序看起来无论我写的方式如何(astrik或no astrik)?
答案 0 :(得分:3)
类型不一样,但在函数声明中用作参数类型时没有区别。
在int (*cmp)(Type, Type)
中,cmp
具有指针到函数类型(或“函数指针”类型)。
在int (cmp)(Type, Type)
中,cmp
具有函数类型(即,它根本不是指针类型)。
但是,C和C ++都有一个规则,即任何具有函数类型的参数都会隐式转换为相应的函数指针类型,就像任何具有数组类型的参数被隐式转换为相应的指针类型一样。