C++ 函数指针
函数指针指向的是函数而非对象,函数指针的类型由他返回的参数和形参类型共同决定,与函数名。
该函数类型为bool,比较两个字符串的长度。我们想要声明一个可以指向该函数的指针只需要用指针替换函数名即可。
pt指向一个函数,该函数的参数是两个const string的引用,返回值是bool。
从我们声明的名字开始观察,pt是一个指针,右侧是形参列表,所以他是指向函数的指针,同时它的返回值是bool。
注意:这里的括号必不可少,否则pt就是一个返回值为bool指针的函数。
使用函数指针
当我们把函数名作为一个值使用时,该函数自动的转换为指针。
此外我们还能直接使用指向函数的指针调用该函数,无须提前解引用指针
在指向不同函数类型的指针间不存在转换规则,但是我们可以为函数指针赋值为nullptr或者值为的整型常量表达式,表示他没有指向任何函数。
重载函数的指针
当我们使用重载函数时,上下文必须清晰的界定到底该选择哪个函数。
编译器通过指针的类型选用哪个函数,指针类型必须和重载函数中的某一个函数精确匹配
函数指针形参
与数组类似,虽然不能定义函数类型的形参,但是形参可以是指向函数的指针。
这两个函数时等价的声明,第三个形参看起来是函数,实际上是当成指针来使用。
返回指向函数的指针
和数组类似,虽然布恩那个返回一个函数,但是能返回指向函数类型的指针,然而我们必须把返回类型写成指针形式,编译器不会自动的将函数返回类型当成对应的指针类型处理。
要想声明一个返回函数指针的函数最简单的就是使用类型别名,其中我们使用类型别名将F定义为函数类型,将PF定义成指向函数类型的指针,和函数类型的形参不一样,返回类型不会自动转换为指针,我们必须显式的将返回类型定为指针。
当然我们也能直接声明f1
按照由内向外的顺序阅读这条声明语句,f1有形参列表所以f1是个函数,f1之前有个*,所以f1返回一个指针,同时指针的类型本身也包含形参列表,因此指针指向函数,该函数的返回值必须是int。