函数指针

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

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

函数指针

(*pf)两端的括号必不可少。否则 pf 是一个返回值为 bool 指针的函数。

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

调用函数指针

在指向不同函数类型的指针间不存在转换规则。但可以为函数指针赋一个 nullptr 或者值为 0 的整形常量表达式,表示该指针没有指向任何一个函数。

重载函数时,上下文必须清晰地界定到底应该选用哪个函数。

和数组类似,虽然不能定义函数类型的形参,但时形参可以是指向函数的指针。形参看起来时函数类型,实际上却是当成指针使用。

也可以把函数直接作为实参使用,此时它会自动转换成指针。

和数组类似,虽然不能返回一个函数,但是能返回指向函数类型的指针。编译器不会自动地将函数返回类型单程对应的指针类型处理,须把返回类型写成指针形式。

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

按照由内向外的方式阅读,f1 有形参列表,所以 f1 是个函数;f1 前面有 * ,所以 f1 返回一个指针;指针的类型本身也包含形参列表,因此指针指向函数,该函数的返回类型是 int。

如果我们明确知道返回的函数是哪一个,就能使用 decltype 简化书写函数指针返回类型的过程。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容