原创 【博客大赛】《C++ Primer》学习笔记(22)函数指针

2016-3-22 16:08 921 14 14 分类: MCU/ 嵌入式 文集: Qt和Cpp
函数指针就是指向函数的指针,比如:
bool (*pf)(const string &, const string &);

使用函数名称的时候,实际上使用的是它的指针。下面两个表达式的含义是一样的:
pf = lengthCompare;
pf = &lengthCompare;

下面两个表达式的含义也是一样的:
pf("hello", "goodbye");
(*pf)("hello", "goodbye");

不同的函数指针类型之间,不能够转换。
当定义可重载的函数的指针时,需要显式的指定函数类型:
void ff(int*);
void ff(unsigned int);
void (*pf1)(unsigned int) = ff;

可以使用函数名作为函数的参数,它会被自动转换成指针。
当然,函数指针也可以作为函数的参数。

更简单的方法是,使用变量别名来进行函数指针的类型定义:
typedef bool Func(const string &, const string &);
typedef decltype(lengthCompare) Func2;
typedef bool (*FuncP)(const string &, const string &);
typedef decltype(lengthCompare) *FuncP2;

----------------
使用函数指针作为返回值
和数组一样,函数类型不能直接作为返回值,但是函数指针可以。因为编译器此时不会自动将它转换。
和数组一样,使用函数指针的类型别名是个好方法,注意函数类型的别名仍然不能作为返回值。

直接的定义:int (*f1(int))(int*, int);
后缀式的定义:auto f1(int) -> int (*)(int*, int);
使用auto或者decltype:
int func(int*, int);
decltype(func) *f1(int);

函数指针和数组指针有着很多类似的地方,可以比较着来理解。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
14
关闭 站长推荐上一条 /3 下一条