c – 为什么我们不能从具有默认参数的函数调用函数?

该程序:

#include <iostream>

void foo(void (*bar)()){ bar(); };

void foo(int a = 5)
{
    std::cout << a << std::endl;
}

int main()
{ 
    foo(foo); //Error
}

DEMO

我预计最终会调用foo(5).相比之下,以下程序工作正常:

#include <iostream>

void foo(void (*bar)()){ bar(); };

void foo()
{
    std::cout << 5 << std::endl;
}

int main()
{ 
    foo(foo); //OK
}

DEMO

你能解释一下这个区别吗?

最佳答案 在第一个示例中,尽管foo具有默认参数,但其类型为void(bar *)(int).使用默认参数可以调用foo而无需显式指定参数值,但仍有一个int参数.只需自动填充其值(在编译期间).

点赞