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

标签 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

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

最佳答案

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

关于c++ - 为什么我们不能从具有默认参数的函数中调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996897/

相关文章:

c++ - 使用默认参数从 lambda 调用最少数量的参数

c++ - GCC 中默认参数段错误的 std::map 参数和空括号初始化器

c++ - Unreal Engine 4手游开发C++中如何接收触摸拖拽事件

c++ - O(N ^ 2)时间内的回文分割问题

c++ - 带有 msvc140 的通用 lambda

c++ - 标准库中没有 std::identity 是有原因的吗?

c - C 声明是否应与定义匹配,包括关键字和限定符,例如 "static"、 "inline"等

javascript - Angular Firestore 根据返回的 bool 值显示一个按钮,该 bool 值检查 Firestore 文档是否存在

Python 默认参数评估

C++: gethostname() 失败