c++ 数组,函数指针

先看一个极其复杂的函数声明:

std::string (*(*returnFunction(std::string (*(*pf)(std::initializer_list<std::string> list))[5]))(std::initializer_list<std::string> list))[5];

特别长,一页几乎不能显示完全。
然后看其函数名,参数类型,及返回类型。几乎也是完全看不出分别是什么。

如果换一种表达方式:

auto returnFunction(std::string (*(*pf)(std::initializer_list<std::string> list))[5])
    -> std::string (*(*)(std::initializer_list<std::string> list))[5];

这样能一眼看出返回值类型了,还有函数名。参数列表也能看清楚了。

不过这种表示还是不太直观。

再换一种表达方式呢?

using pm = std::string (*(*)(std::initializer_list<std::string> list))[5];
pm returnMethod(pm from);

这种是不是就非常清晰了。就算完全不懂 c++ ,也知道这个函数声明表达的是什么了。

还有一种传统的简化方式。

typedef std::string (*(*ptm)(std::initializer_list<std::string> list))[5];
ptm returnTypeMethod(ptm from);

以上4种,其实是完全相同的函数描述。返回类型,参数列表都是完全相同的。

3,4是非常简单易懂的。不过现在只是直到这个函数的参数类型与返回值类型相同,还不知道这个参数类型或者说返回值类型,到底是什么类型。

那就先看这个东西是什么: std::string (*(*ptm)(std::initializer_list<std::string> list))[5]

  1. ptm是一个指针
  2. (*ptm)后面有参数列表,所以 *ptm 是一个函数
  3. 这个函数的返回值是一个指针
  4. 返回值的指针,指向一个长度为5,元素为 string 类型的数组。

综合:ptm是一个函数指针。指向的是一个函数,其参数是一个 initializer_list类型的对象,其返回值是一个指针,该指针指向的是一个长度为5,元素为 string 类型的数组

那么,上面定义的函数就是这么一个函数,参数与返回值都是 ptm类型的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值