首页 > 解决方案 > 指向 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函数的指针在哪里?

其他指针和指向函数的指针有什么区别?

标签: c++pointers

解决方案


*pf() 和 pf() 如何在 pf 是指向函数的指针的情况下相同?

它们不一样(因为运算符优先级)。如果您的意思(*pf)()pf()实际上相同,那是因为语言规则是这样说的。具体来说,规则说:

[expr.call]

函数调用是一个后缀表达式,后跟括号,其中包含一个可能为空的逗号分隔的初始化子句列表,这些初始化子句构成函数的参数。后缀表达式应具有函数类型或函数指针类型。对于对非成员函数或静态成员函数的调用,后缀表达式应为引用函数的左值(在这种情况下,函数到指针的标准转换([conv.func])被抑制在后缀表达式上),或具有函数指针类型。

在 的情况下(*pf)(),表达式(*pf)是一个引用函数的左值,而在 的情况下pf(),表达式pf具有函数指针类型。在这两种情况下,都会调用指向的函数pf

其他指针和指向函数的指针有什么区别?

主要区别在于函数指针指向函数,而指向对象的指针指向对象。


推荐阅读