如何分析C++中的复杂类型表达式?以fp类型分析为例
代码语法解析与fp类型分析
咱们一步一步拆解这段代码,先理清函数f的逻辑,再重点分析fp的类型:
1. 函数f的类型与逻辑
int *f(int *p, int a) { return p + a; }
f是一个普通函数:- 参数:第一个是
int*类型的指针p,第二个是int类型的整数a - 返回值:
int*类型的指针,这里p + a是指针算术操作,等价于取p指向数组中第a个元素的地址(前提是p确实指向合法数组且a的取值在有效范围内)
- 参数:第一个是
2. 标识符fp的类型拆解
C++复杂类型的分析核心是从标识符开始,由内向外逐层解析,咱们对int *(*fp())(int *, int)拆解:
- 最内层
fp():说明fp是一个无参数的函数 - 外层的
(*fp()):表示fp函数的返回值是一个指针 - 后面的
(int *, int):说明这个指针指向的是一个函数,该函数的参数列表为(int*, int) - 最前面的
int *:表示这个被指针指向的函数,返回值是int*类型的指针
总结:fp是一个无参数函数,它的返回值是一个函数指针,这个指针指向的是“接收int*和int作为参数、返回int*”的函数。
3. 代码逻辑合理性
函数f正好符合“参数为(int*, int)、返回值为int*”的类型要求,所以fp()返回f是完全合法的——这里f会被隐式转换成对应的函数指针类型,和fp的返回值类型完全匹配。
内容的提问来源于stack exchange,提问作者Raine Huang
相关产品推荐
相关产品推荐

