默认情况下,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只是被拷贝到了alter函数中, g(9); //而并未把a对象(或者a的引用)传给bind所绑定的alter函数! cout << a << endl; //所以此处a仍为5 auto f = bind(alter,ref(a), _1); //使用ref可以将bind中的a对象(或者a的引用)传给bind所绑定的alter函数 f(9); cout << a << endl; //所以此处a变成了9 return 0; }