该程序:
#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
}
你能解释一下这个区别吗?
最佳答案 在第一个示例中,尽管foo具有默认参数,但其类型为void(bar *)(int).使用默认参数可以调用foo而无需显式指定参数值,但仍有一个int参数.只需自动填充其值(在编译期间).