函数指针

函数指针,顾名思义,就是指向函数的指针。那么如何声明一个函数指针呢:答案是返回值以及形参列表与原函数相同,再加个指针符号' * '就好了。

bool lengthCompare(const string &, const string &);  //原函数

bool (*pf)(const string &, const string &);   //指向函数lengthCompare的指针,未初始化

如上所示。并且很容易知道,当我们把函数名作为一个右值使用时,此函数名会自动地转化为指针,当然,也可用取地址符(两者是等价的):

pf = lengthCompare;
pf = &lengthCompare;

既然是等价的,那么自然而然就可以直接使用此指针函数(初始化后)直接调用该函数(而不用解引用):

bool b1 = pf("hello", "goodbye");

bool b2 = (*pf)("hello", "goodbye");

bool b3 = lenthCompare("hello", "goodbye");

//以上三个调用等价(pf由lengthCompare初始化)

那么函数指针的出现有什么用呢?其中一个常见的用处就是用于重载函数的选择:当我们使用重载函数的时候,一般需要给定形参列表才能让编译器找到对应的函数,(未给定形参列表)而如果定义了指向重载函数的指针,就可以通过指针类型来决定使用哪个函数。(下面例子是Qt 的信号槽):

QObject::connect(spinBox, &QSpinBox::valueChanged, silder, &QSlider::setValue);  
/* 此时会报错,因为QSpinBox有两个同名函数信号:
void valueChanged(int);
void valueChanged(const QString &);
*/

//解决这个问题的方法就是定义一个指向重载函数的指针

void (QSpinBox::*spinBoxSignal)(int) = &QSpinBox::valueChanged; //第一个重载

//此时调用connect, 将valueChanged变成spinBoxSignal即可

原文转载:https://www.cnblogs.com/zhlabcd/p/11286804.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值