函数参数之间的差异

difference between function parameters

本文关键字:之间 参数 函数      更新时间:2023-10-16

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

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

我习惯于把*看作一个指针声明。。。这是指向函数FunctTemplate的指针吗?为什么不管我怎么写(astrik或no astrik),程序都能正常工作?

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

int (*cmp)(Type, Type)中,cmp具有指向函数类型(或"函数指针"类型)的指针。

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

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