为什么带有p1和p2的行可以合并?
他们有不同的类型
#include <functional>
#include <iostream>
void cb(int X)
{
std::cout << X << "\n";
}
int main(void) {
std::function<void(void)> p1 = std::bind(cb, 9);
std::function<void(int)> p2 = std::bind(cb, 5);
//p1 = p2;
}
Run Code Online (Sandbox Code Playgroud)
如果我取消注释行p1 = p2 - 编译错误
std::bind
调用创建的函数对象忽略所有额外的参数.例:
void f(int);
int main() {
auto a = std::bind(f, 42);
a();
a(1);
a(1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)
您可以将此类对象指定为std::function
使用相同或更多数量的参数.同样,额外的参数将被默默地忽略.
C++ 11 lambda更有效,额外的参数会导致编译错误(例如try auto a = []() { f(42); };
).