您现在的位置是:首页 > 文章详情

5分钟搞懂C++函数指针与函数类型

日期:2018-09-29点击:480

函数指针和函数类型

函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。

函数类型由它的返回值和参数类型决定,与函数名无关。

bool length_compare(const string &, const string &);

上述函数类型是:

bool (const string &, const string &);

上述函数指针pf:

bool (*pf)(const string &, const string &);

使用函数指针

当把函数名作为一个值使用时,该函数自动的转换成指针,如:

pf = length_compare <=>等价于 pf = &length_compare12

函数指针形参

函数类型不能定义为形参,但是形参可以是指向函数的指针;

函数作为实参使用时,会自动的转换成函数指针;

typedef bool Func(const string &, const string &) // Func是函数类型; typedef bool (*FuncP)(const string &, const string &) // FuncP是函数指针类型; typedef decltype(length_compare) Func2 // Func2是函数类型; typedef decltype(length_compare) *Func2P // Func2P是函数指针类型;
注意decltype(length_compare)返回的是函数类型,而不是函数指针类型;

using FTtype = int(int,int); //函数类型 typedef int (*pf)(int, int); //函数指针 int func(int a, int b){return a+b;} void print(int a, int b, FTtype fn){ // 编译器将其隐式转化成函数指针 cout << fn(a,b) << endl; } int main() { print(1,2,func); cout << typeid(FTtype).name() << endl; cout << typeid(func).name() << endl; cout << typeid(decltype(func)).name() << endl; cout << typeid(pf).name() << endl; return 0; }

下面两个声明语句是同一个函数,因为编译器会自动的将FTtype 转换成函数指针类型。

void print(int a, int b, FTtype  fn);

void print(int a, int b, pf fn);

返回指向函数的指针

虽然不能返回一个函数,但是能返回执行函数类型的指针。和函数参数不同,编译器不会自动地将函数返回类型当作指针类型处理,必须显示的将返回类型指定为指针。如:

using F = int(int*, int); using PF = int(*)(int*,int); F f1(int); //错误: F是函数类型 PF f1(int); //正确: PF是函数指针类型

f1也可以写出下面两种形式:

int (*f1(int))(int*, int);

auto f1(int)->int(*)(int*, int);

作者:guoxiaojie_415

来源:https://blog.csdn.net/guoxiaojie_415/article/details/79921788


原文发布时间为:2018-09-30

原文作者:良许Linux

本文来自云栖社区合作伙伴“良许Linux”,了解相关信息可以关注“良许Linux”。

原文链接:https://yq.aliyun.com/articles/646979
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章