函数指针需要一个&符号

时间:2013-06-04 11:50:16

标签: c++ c function-pointers

在C / C ++中,如果我有以下功能:

void foo();
void bar(void (*funcPtr)());

这两个电话之间是否存在差异:

bar(foo);
bar(&foo);

3 个答案:

答案 0 :(得分:36)

不,没有区别,因为函数可以隐式转换为指向函数的指针。 标准相关报价(N3376 4.3 / 1)。

函数类型T的左值可以转换为“指向T的指针”的prvalue。结果是指向的指针 功能。

答案 1 :(得分:9)

  

这两个电话之间是否存在差异:

不,没有区别。

答案 2 :(得分:0)

bar(foo);被称为“简短”版本

bar(&foo);是如何正式完成的

在功能上,没有区别,但是大多数人认为第二个选项是“良好实践”,因为foo实际上是一个函数指针而不是实际函数更为明显。

这与数组类似。如果你有:

int foobar[10]; 

然后foobar是一个int *,但你也可以做& foobar同样的结果。