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

时间:2015-01-17 06:34:33

标签: c++ function default-arguments

该计划:

#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

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

1 个答案:

答案 0 :(得分:2)

在第一个例子中,虽然foo有默认参数,但它的类型是void(bar *)(int)。使用默认参数可以调用foo而无需显式指定参数值,但仍有一个int参数。只需自动填充其值(在编译期间)。