我有一个简单的问题:
C或C++中的函数类型是什么
由于我们可以在 C 或 C++ 中拥有指向函数的指针,这意味着函数应该具有特定的类型,否则在创建函数的指针期间进行类型检查是没有意义的。
有人可以解释一下,我是否在正确的道路上?
如果我走在正确的道路上,我怎样才能找到函数的类型?
我有一个简单的问题:
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);
有许多不同类型的函数。在此处找到有关函数指针的有用参考。
此外,此分类基于return type and argument types
. 功能也可以根据其可访问性的范围进行分类。像全局函数、静态函数等。请参阅此处了解简短介绍。
因为每个函数都有它的类型,
例如,函数
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 指向该类型函数的指针,您可以编写
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
。它们根本不兼容。
但是,如果goo
是static
函数,那么它所属的事实struct A
是不够的(就成员函数需要隐式this
参数而static
函数不需要)。
它实际上function signature
应该与declaration
或与匹配function pointer
函数签名包含参数类型、参数数量和返回类型等所有内容。
直接像变量一样,您不能说特定函数是int
类型或float
类型char
等
永远记住它signature
就像我上面所说的那样。
每对两个类型 (A,B) 都有一个特定的函数类型 A->B。如果我们选择 A=int, B=float,那么函数类型将变为:
float my_function(int a);