Cpp函数指针辨析

在Cpp中,函数名不可以作为形参或者返回参数,但是函数指针可以

#include <iostream>
#include<initializer_list>

using namespace std;

void show(string s, int i) {
    while (i--) cout << s << endl;
}

// 返回函数指针
// decltype返回的是函数类型,而函数只能返回函数指针
decltype(show) *getShow() {
    return show;
}

auto getShow2() -> void (*)(string, int) {
    return show;
}

// F是函数名
typedef decltype(show) F;
// PF是函数指针
typedef decltype(show) *PF;

using FF = decltype(show);
using PFF = decltype(show) *;

using FFF = void(string, int);
using PFFF = void (*)(string, int);

void recvFunc(void(*f)(string, int), string s, int i) {
    f(s, i);
}

void recvFunc2(PFF f, string s, int i) {
    f(s, i);
}

void recvFunc3(F *f, string s, int i) {
    f(s, i);
}


int main() {
    void (*f1)(string, int);
    void (*f2)(string, int);
    // 对于函数指针,show 和 &show是等价的
    f1 = show;
    f2 = &show;
    f1("Hello", 1);
    f2("World !", 2);


    F *f3 = show;
    PF f4 = show;
    f3("Hello", 1);
    f4("World !", 2);


    FF *f5 = show;
    PFF f6 = show;
    f5("Hello", 1);
    f6("World !", 2);

    recvFunc(show, "Do!", 3);
    recvFunc2(show, "HA!", 3);
    recvFunc3(show, "LA!", 3);

    FFF *f7 = show;
    PFFF f8 = show;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值