函数(六):函数指针

<基于 C++ Primer P221>
1.函数指针指向的是哈函数而非对象,指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定,与函数名无关。想要声明一个可以指向该函数的指针,只需要用指针替换函数名即可。
2.当我们把一个函数名当做一个值使用时,该函数自动地转换成指针。
此外,可以直接使用指向函数的指针调用该函数,无须提前解引用指针。

bool lengthCompare(const string &, const string &);
bool (*pf)(const string &, const string &);
pf = lengthCompare;
pf = &lengthComapre; // 和上面的语句等价,即取地址符是可选的
// 以下三调用等价
bool b1 = pf("hello", "goodbye");
bool b2 = (*pf)("hello", "goodbye");
bool b3 = lengthCompare("hello", "goodbye");

3.定义重载函数的指针,编译器通过指针类型决定选用哪个函数,指针类型必须与重载函数中的某一个精确匹配。
4.函数指针的形参
函数指针的作用类似于数组,虽然不能定义函数类型的形参,但是形参可以是指向函数的指针。此时,形参看起来是函数类型,实际上却是当作指针使用。
我们可以直接把函数作为实参使用,此时它会自动转化成指针。
可以使用类型别名和 decltype 简化使用函数指针的代码。但是 decltype 只能返回函数类型,不会将函数类型自动转换成指针类型。
5.返回指向函数的指针
和数组类似,虽然不能返回一个函数,但是可以返回指向函数类型的指针。但是我们必须把返回类型写成指针形式,编译器不会自动地将函数返回类型当成对应的指针类型处理。
同样,可以使用类型别名和 decltype 简化声明返回函数指针的函数的代码。
6.将 auto 和 decltype 用于函数指针类型
牢记当我们将 decltype 作用于某个函数时,它返回的是函数类型而非指针类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值