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

Why can't we call a function from a function with a default argument?

本文关键字:参数 函数调用 函数 默认 我们 不能 为什么      更新时间:2023-10-16

程序:

#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 参数。只是它的值会自动填充(在编译期间)。