原创
【博客大赛】《C++ Primer》学习笔记(22)函数指针
函数指针就是指向函数的指针,比如:
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);
函数指针和数组指针有着很多类似的地方,可以比较着来理解。
文章评论(0条评论)
登录后参与讨论