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

C++中将函数指针声明为类属性的方法及不同写法的差异

两种声明的核心区别

本质是C/C++声明规则中优先级绑定的差异,括号的作用范围不同直接决定了标识符的类型:

  • 对于void *(func)():
    括号仅包裹标识符func本身,不会改变声明优先级,func会优先和后置的()绑定,代表它是一个函数,函数的返回值类型为void*(空类型指针)。这种写法和void* func()完全等价,本质是函数声明,而非函数指针变量声明,自然无法给它赋值其他函数地址。
  • 对于void (*func)():
    括号包裹了*func整体,强制调整优先级,让func先和*绑定,代表它是一个指针,再和后置的()绑定,说明这个指针指向的是一个函数,该函数的返回值为void(无返回值),这才是标准的无参无返回值函数指针声明,支持后续赋值其他同类型函数的地址。

避坑提示

如果担心写混函数指针,可以用类型别名简化声明:
C++11及以上版本推荐用using:

using VoidFuncPtr = void (*)();
// 后续直接用别名定义变量,不会出错
VoidFuncPtr func;

低版本C++也可以用typedef:

typedef void (*VoidFuncPtr)();
VoidFuncPtr func;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:45:04