为什么带有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;
}
如果我取消注释p1 = p2行-编译错误
答案 0 :(得分:6)
由std::bind
调用创建的功能对象将忽略所有其他参数。示例:
void f(int);
int main() {
auto a = std::bind(f, 42);
a();
a(1);
a(1, 2, 3);
}
您可以使用相同或更多数量的参数将这样的对象分配给std::function
。同样,多余的参数将被静默忽略。
C ++ 11 lambda效率更高,并且多余的参数会导致编译器错误(例如,尝试auto a = []() { f(42); };
)。