You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中是否存在从函数指针到函数的隐式转换?

澄清C++函数指针的常见混淆点

我发布此文主要是为了澄清Stack Overflow上遇到的一些关于函数指针的易混淆、误导性信息。

我们从一个示例开始:

#include <iostream>

void func ()
{
    std::cout<<"func here"<<'\n';
}

int main()
{
    void (*fp)()=func;
    void (&fref)()=func;

    func();//通过函数调用
    (&func)();//通过函数指针调用
    (*fp)();//通过函数调用
    fp();//通过函数指针调用
    fref();//通过函数调用
    (&fref)();//通过函数指针调用
}

运行后输出:

func here
func here
func here
func here
func here
func here

可以看到,得益于函数到函数指针的退化,函数大多时候可以替代函数指针使用,cppreference中的说明如下:

函数类型T的左值可隐式转换为指向该函数的纯右值指针。此转换不适用于非静态成员函数,因为不存在引用非静态成员函数的左值。

但除此之外,函数指针似乎也可以替代函数使用——调用时无需显式解引用即可执行函数。

此外,Stack Overflow上的回答提到:

还要注意,通过函数指针调用时不需要使用一元*运算符;(*p1_foo)();和(p1_foo)();结果相同,同样是因为函数到函数指针的转换。

另一篇Stack Overflow回答则表示:

还有一种对称的便利性:处于调用位置的函数指针会自动转换为函数值,因此调用函数指针时不需要写*。

这些内容似乎表明,存在从函数指针到函数的隐式转换。

内容的提问来源于stack exchange,提问作者Aiko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:33:24