默认情况下,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 = ;
auto g = bind(alter, a, _1); //此处bind中的参数a只是a的一个拷贝,而不是a的引用
g();
cout << a << endl; //所以此处a仍为5 auto f = bind(alter,ref(a), _1); //使用ref可以将a的引用传递给bind
f();
cout << a << endl; //所以此处a变成了9 return ;
}