在C / C ++中,如果我有以下功能:
void foo();
void bar(void (*funcPtr)());
这两个电话之间是否存在差异:
bar(foo);
bar(&foo);
答案 0 :(得分:36)
不,没有区别,因为函数可以隐式转换为指向函数的指针。 标准相关报价(N3376 4.3 / 1)。
函数类型T的左值可以转换为“指向T的指针”的prvalue。结果是指向的指针 功能。
答案 1 :(得分:9)
这两个电话之间是否存在差异:
不,没有区别。
答案 2 :(得分:0)
bar(foo);
被称为“简短”版本
bar(&foo);
是如何正式完成的
在功能上,没有区别,但是大多数人认为第二个选项是“良好实践”,因为foo实际上是一个函数指针而不是实际函数更为明显。
这与数组类似。如果你有:
int foobar[10];
然后foobar是一个int *,但你也可以做& foobar同样的结果。