为什么带有 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 - 编译错误
最佳答案
由 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); };
)。
关于c++ - 为什么转换为 std::function 没有编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707656/