我有一个简单的问题:
C或C ++中的函数是什么类型
因为我们可以在C或C ++中获得指向函数的指针,这意味着函数应该具有特定的类型,否则在创建函数的指针期间进行类型检查没有任何意义。
有人可以向我解释,我在正确的道路上吗?
如果我走的路正确,如何找到函数的类型?
[C / C ++中的函数类型包括return type
和types of input parameters
。
请考虑以下函数声明:
int function(char, float);
指向该函数的指针具有以下类型:
int (*funptr)(char, float);
大致类似:
returntype function (argtype1, argtype2, argtype3)
指向该函数的相应指针是
returntype (*ptr) (atgtype1, atgtype2, atgtype3);
有许多不同类型的功能。查找useful reference on function pointers here。
此外,此分类基于return type and argument types
。函数也可以根据其可访问性范围进行分类。,例如全局函数,静态函数等。请参见此处for a short introduction。
由于每个函数都有其类型,
例如,功能
double foo(bar& f, const const baz*)
具有一种
function, that accepts reference to bar and constant pointer to baz and return double
可以这样写
double ()(bar&, const baz*)
指向该函数类型的变量的指针将具有类型(可以存储指向该函数的指针的变量)
将具有类型
double (*)(bar&, const baz*)
或者,如果要键入指向该类型函数的指针,则可以编写
typedef double (*func_ptr)(bar&, const baz*)
再次,
func_ptr is a type of pointer to function, that accepts reference to bar and constant pointer to baz and return double
这里有一件事是函数衰减为指向函数的指针,因此您可以编写
func_ptr f = &foo;
和
func_ptr g = foo;
而且会是一样的。
现在想像,您有
struct A
{
double goo(bar& f, const const baz*);
};
现在goo
具有类型
function of struct A, that accepts reference to bar and constant pointer to baz and return double
指向此函数的指针将具有类型
double (A::*)(bar&, const baz*)
注意,它从自由函数foo
的类型键入differs。它们根本不兼容。
但是,如果goo
是static
函数,则它属于struct A
的事实将是不够的(只要成员函数需要隐式的this
参数,而static
函数则不需要)。>>
实际上是function signature
,应该与declaration
或function pointer
匹配
两种类型(A,B)的每对都有特定的功能类型A-> B。如果我们选择A = int,B = float,则函数类型将变为: