该计划:
#include <iostream>
void foo(void (*bar)()){ bar(); };
void foo(int a = 5)
{
std::cout << a << std::endl;
}
int main()
{
foo(foo); //Error
}
我预计最终会调用foo(5)
。相比之下,以下程序工作正常:
#include <iostream>
void foo(void (*bar)()){ bar(); };
void foo()
{
std::cout << 5 << std::endl;
}
int main()
{
foo(foo); //OK
}
你能解释一下这个区别吗?
答案 0 :(得分:2)
在第一个例子中,虽然foo有默认参数,但它的类型是void(bar *)(int)。使用默认参数可以调用foo而无需显式指定参数值,但仍有一个int参数。只需自动填充其值(在编译期间)。