默认情况下,bind的那些不是占位符的参数被拷贝到bind返回的可调用对象中。
当需要把对象传到bind中的参数中时,需要使用ref或者cref。
例如:
#include<iostream>
#include<functional>
using namespace std;
using namespace placeholders;
void alter(int &a,int b)
{
a = b;
}
int main()
{
int a = 5;
auto g = bind(alter, a, _1); //此处bind中的参数a只是a的一个拷贝,而不是a的引用
g(9);
cout << a << endl; //所以此处a仍为5
auto f = bind(alter,ref(a), _1); //使用ref可以将a的引用传递给bind
f(9);
cout << a << endl; //所以此处a变成了9
return 0;
}