C或C ++中的函数类型

问题描述 投票:3回答:4

我有一个简单的问题:

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

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

有人可以向我解释,我在正确的道路上吗?

如果我走的路正确,如何找到函数的类型?

c++ c function pointers typechecking
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);  

有许多不同类型的功能。查找useful reference on function pointers here

此外,此分类基于return type and argument types。函数也可以根据其可访问性范围进行分类。,例如全局函数,静态函数等。请参见此处for a short introduction


4
投票

由于每个函数都有其类型,

例如,功能

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。它们根本不兼容。

但是,如果goostatic函数,则它属于struct A的事实将是不够的(只要成员函数需要隐式的this参数,而static函数则不需要)。>>


2
投票

实际上是function signature,应该与declarationfunction pointer匹配


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.