我正在尝试理解C ++函数指针语法。在我输入的Linux上的Eclipse中:
void(*);
它突出显示了带有语法错误消息的语句,但它让我编译它并运行程序。然后在Visual Studio上我尝试了它并且它不会编译,说"期望表达"。然而,当我这样做时,奇怪的是:
std::vector<void(*)> myVector;
它在Visual Studio上编译得很好。还有几个在线编译器void(*);在它自己的工作正常。我知道:
void (*)();
...是一个函数指针和..
void();
...是一个函数签名,这就是你可以这样做的原因:
std::function<void()> func;
我在理解函数指针语法方面遇到了很多麻烦。
感谢。
答案 0 :(得分:12)
请记住括号可用于更改某些事物的优先级。这就是为什么你在void (*)()
的星号周围有括号,因为它与void *()
非常不同。
在void(*)
的情况下,括号是这样的优先级更改括号。但它们不是必需的。类型void(*)
为void*
,简单明了。
使用它的上下文非常重要。