C++函数指针声明语法

6

foo 的参数方面,这两种声明有什么区别?第二种语法对我来说很熟悉,它声明一个指向函数的指针。这两种声明完全等价吗?

void foo(int(int));
void foo(int(*)(int));

这个答案提供了关于函数指针声明中星号使用和不使用的一些有用信息。 - Remy Lebeau
gcc认为在这个上下文中它们是相等的:https://ideone.com/snKfj6 - Slava
1个回答

7
只要在函数参数列表中使用int(int)int(*)(int),它们就是等效的。在函数参数列表中,语言会自动将int(int)“调整”为int(*)(int)
这与使int []参数声明等效于int *参数声明的调整机制相同。
在这种特定情况之外,int(int)int(*)(int)具有不同的含义。

谢谢!您能详细说明一下在函数参数上下文之外声明的两个不同含义是什么吗?您是否意味着一个声明了函数类型,而另一个声明了指针?也就是说,这已经在我的问题评论中指出了吗? - lukeg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接