c++ - 指向 C++ 中函数的指针,(*pf)() 和 pf 是否相同?
问题描述
我是 C++ 的初学者,在理解函数指针时遇到问题:
main()
{
double pam(int);
double (*pf)(int);
pf = pam;
double x = pam(4);
double y = (*pf)(5);
double y = pf(5);
}
怎么可能(*pf)()
和pf()
一样,在哪里pf
函数的指针在哪里?
其他指针和指向函数的指针有什么区别?
解决方案
*pf() 和 pf() 如何在 pf 是指向函数的指针的情况下相同?
它们不一样(因为运算符优先级)。如果您的意思(*pf)()
和pf()
实际上相同,那是因为语言规则是这样说的。具体来说,规则说:
[expr.call]
函数调用是一个后缀表达式,后跟括号,其中包含一个可能为空的逗号分隔的初始化子句列表,这些初始化子句构成函数的参数。后缀表达式应具有函数类型或函数指针类型。对于对非成员函数或静态成员函数的调用,后缀表达式应为引用函数的左值(在这种情况下,函数到指针的标准转换([conv.func])被抑制在后缀表达式上),或具有函数指针类型。
在 的情况下(*pf)()
,表达式(*pf)
是一个引用函数的左值,而在 的情况下pf()
,表达式pf
具有函数指针类型。在这两种情况下,都会调用指向的函数pf
。
其他指针和指向函数的指针有什么区别?
主要区别在于函数指针指向函数,而指向对象的指针指向对象。
推荐阅读
- django - 令牌身份验证不起作用 django rest 框架
- docker - docker 容器仅在 windows GUI 下运行
- javascript - 如何在 google colab 中制作文本区域?
- python - 为什么 pygame.Surface 对象在类中不可下标?
- mqtt - 如何发现启用 MQTT 的局域网中的所有设备?
- angular - 星云角色 - isGranted() 始终为真
- python - 根据随机变量的值将值分配给 DataFrame 列
- google-sheets - 简单现金簿中总计的数组公式
- vue.js - 带有 baseurl 和公共路径的 Nginx 和 Vuejs 3 配置
- python - 如何将列表序列化回其原始二进制数据库?