C或C++中的函数类型

ttvkxqim  于 2022-12-26  发布在  其他
关注(0)|答案(4)|浏览(195)

我有一个简单的问题:
C或C中的函数类型是什么
因为我们可以在C或C
中有指向函数的指针,这意味着函数应该有一个特定的类型,否则在创建指向函数的指针时进行类型检查是没有意义的。
有人能解释一下我,我走的路是对的还是错的?
如果我在正确的路径上,我怎么能找到函数的类型?

mec1mxoz

mec1mxoz1#

函数指针的语法

C/C++中的函数类型包括return typetypes 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

qvtsj1bj

qvtsj1bj2#

当然每个函数都有它的类型,
例如,函数

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的类型 * 不同 *。它们根本不兼容。
然而,如果goostatic函数,则它属于struct A的事实将是不够的(只要成员函数需要隐式this参数而static函数不需要)。

yhived7q

yhived7q3#

它实际上是function signature,应该与declarationfunction pointer匹配
函数签名包含所有内容,如参数类型,参数数目和返回类型.
就像变量一样,不能直接说特定函数是int类型、float类型或char类型等
永远记住它是signature,就像我上面说的。

z0qdvdin

z0qdvdin4#

每一对两个类型(A,B)都有一个特定的函数类型A-〉B。如果我们选择A=int,B=float,那么函数类型将变为:

float my_function(int a);

相关问题