44

In C/C++, if I have a the following functions:

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

Is there a difference between these two calls:

bar(foo);
bar(&foo);

?

4

3 回答 3

42

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

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

于 2013-06-04T11:51:30.867 回答
8

这两个调用之间是否有区别:

不,没有区别。

于 2013-06-04T11:51:20.837 回答
0

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

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

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

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

int foobar[10]; 

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

于 2013-06-04T11:55:43.583 回答