c++ - 为什么我可以使用错误的参数成功地 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()
用不同的类型调用?
解决方案
似乎您可以向结果传递更多的参数而bind
不是必要的,它们将被默默地忽略。
如果在调用 [the result of
bind
] 时提供的某些参数与任何占位符 ... 都不匹配,则评估并丢弃未使用的参数。
推荐阅读
- javascript - 按钮上的方法
- google-apps-script - 如何从应用程序脚本按需触发广告脚本?
- java - Jsoup拆分块元素以保留文本和子元素的顺序
- python - 如何使用这种日期格式?
- javascript - Array.map JSON 时间表到网格
- javascript - 关于 Array.reduce() 的奇怪函数
- assembly - 组装错误的memmove执行?
- reactjs - 为什么对 Ref 对象的更改会在此代码中触发重新呈现
- python - websocket错误处理WebSocket'对象没有属性'ws' Python
- javascript - 如何使用 Firebase 进行排名?