C++bind注意事项(传引用参数的时候)

默认情况下,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;
}





猜你喜欢

转载自blog.csdn.net/zzzyyyyyy66/article/details/80285723