4

该程序:

#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
}

演示

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

4

1 回答 1

2

在第一个示例中,尽管 foo 具有默认参数,但它的类型是 void (bar*)(int)。使用默认参数可以在不显式指定参数值的情况下调用 foo,但仍有一个 int 参数。只需自动填充其值(在编译期间)。

于 2015-01-17T07:33:30.410 回答