3

我有一个简单的问题:

C或C++中的函数类型是什么

由于我们可以在 C 或 C++ 中拥有指向函数的指针,这意味着函数应该具有特定的类型,否则在创建函数的指针期间进行类型检查是没有意义的。

有人可以解释一下,我是否在正确的道路上?

如果我走在正确的道路上,我怎样才能找到函数的类型?

4

4 回答 4

6

函数指针的语法

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);  

有许多不同类型的函数。在此处找到有关函数指针的有用参考

此外,此分类基于return type and argument types. 功能也可以根据其可访问性的范围进行分类。像全局函数、静态函数等。请参阅此处了解简短介绍

于 2012-10-25T11:17:44.177 回答
5

因为每个函数都有它的类型,

例如,函数

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函数不需要)。

于 2012-10-25T11:15:36.037 回答
2

它实际上function signature应该与declaration或与匹配function pointer

函数签名包含参数类型、参数数量和返回类型等所有内容。

直接像变量一样,您不能说特定函数是int类型或float类型char

永远记住它signature就像我上面所说的那样。

于 2012-10-25T11:10:32.613 回答
-2

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

float my_function(int a);
于 2012-10-25T11:12:29.227 回答