首页 > 解决方案 > 为什么我可以使用错误的参数成功地 std::bind?

问题描述

#include <iostream>
#include <functional>

using callback = std::function<void(int, void*)>;

void AddCallback(callback cb) {}

void foo(int i) {}

int main() {
  auto f = std::bind(&foo, std::placeholders::_1);
  AddCallback(f);
}

我用 g++ 9.3.0 和 clang++ 10.0.0 尝试了代码,它们都编译结束没有错误。

绑定结果的类型和回调的类型是否相同?一个是std::function<void(int, void*)>,另一个是等于std::function<void(int)>什么?为什么我可以AddCallback()用不同的类型调用?

标签: c++c++11stdbind

解决方案


似乎您可以向结果传递更多的参数而bind不是必要的,它们将被默默地忽略。

如果在调用 [the result of bind] 时提供的某些参数与任何占位符 ... 都不匹配,则评估并丢弃未使用的参数。

cppreference


推荐阅读