函数指针需要&号吗?

Do function pointers need an ampersand

本文关键字:号吗 指针 函数      更新时间:2023-10-16

在C/c++中,如果我有以下函数:

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

这两个调用有区别吗?

bar(foo);
bar(&foo);

?

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

函数类型T的左值可以转换为"指向T的指针"类型的右值,结果是指向函数。

这两个调用有区别吗?

bar(foo);被称为"短"版本

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

从功能上讲,没有区别,但是第二个选项被大多数人认为是"良好实践",因为这样更明显地表明foo实际上是一个函数指针而不是一个实际的函数。

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

int foobar[10]; 

则foobar是一个int *,但您也可以使用&foobar来获得相同的结果。