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);
?
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);
?
不,没有区别,因为函数可以隐式转换为指向函数的指针。标准的相关报价 (N3376 4.3/1)。
函数类型 T 的左值可以转换为“指向 T 的指针”类型的纯右值。结果是指向函数的指针。
这两个调用之间是否有区别:
不,没有区别。
bar(foo);
被称为“短”版本
bar(&foo);
是如何正式完成的
从功能上讲,没有区别,但是第二个选项被大多数人认为是“好的做法”,因为这样更明显 foo 实际上是一个函数指针而不是一个实际的函数。
这与数组类似。如果你有:
int foobar[10];
那么 foobar 是一个 int *,但你也可以使用 &foobar 来获得相同的结果。