bind()是一个函数模板,它的原理是根据已有的模板,生成一个函数,但是由于bind()不知道生成的函数执行的时候,传递进来的参数是否还有效。所以它选择参数值传递而不是引用传递。如果想引用传递,std::ref和std::cref就派上用场了。
#include <functional>
#include <iostream>
using namespace std;
double my_div(double x, double y)
{
cout << x/y << endl;
return x/y;
}
int main()
{
int a = 10, b = 2;
using namespace std::placeholders;
auto f1 = bind(my_div, _1, _2);
f1(10, 2);
auto f2 = bind(my_div, _1, 2);
f2(10);
auto f3 = bind(my_div, _2, _1);
f3(10, 2);
//auto f4 = bind(my_div, 10, _2);//编译错误
//f4(2);
auto f5 = bind(my_div, std::ref(a), std::ref(b));
f5();
}