【发布时间】:2011-05-16 18:38:31
【问题描述】:
我正在学习如何动态加载 DLL,但我不明白的是这一行
typedef void (*FunctionFunc)();
我有几个问题。如果有人能够回答他们,我将不胜感激。
- 为什么使用
typedef? - 语法看起来很奇怪;在
void之后不应该有函数名什么的吗?它看起来像一个匿名函数。 - 是否创建了函数指针来存储函数的内存地址?
所以我现在很困惑;你能帮我澄清一下吗?
【问题讨论】:
-
需要注意的是c++11以后可以用
using FunctionFunc = void (*)();代替。更清楚一点,您只是在声明一个类型的名称(指向函数的指针) -
只是添加到@user362515,对我来说更清晰的形式是:
using FunctionFunc = void(void); -
@topspin IIRC 这两个不一样。一种是函数指针类型,另一种是函数类型。存在隐式转换,这就是它起作用的原因,IANA(C++)L 所以,可以介入并纠正我。无论如何,如果打算定义一个指针类型,我认为
*的语法更明确。 -
这里是a related question I asked a long time ago 说明为什么
myFuncPtr()和(*myFuncPtr)()都是有效的函数调用。