std::ref 用于取某个变量的引用
比如当我们使用std::thread 创建一个线程时
#include <thread>
#include <iostream>
using namespace std;
void f(int a) {
a++;
cout << a << endl;
}
int main() {
int a = 0;
thread t1(f, a);
t1.join();
cout << a << endl;
}
输出
1
0
这个线程函数是以值传递参数时时没有问题的, 线程函数内修改形参不会影响实参,但是假如线程函数是引用传递就需要使用std::ref了
看这样的代码
#include <thread>
#include <iostream>
using namespace std;
void f(int& a) {
a++;
cout << a << endl;
}
int main() {
int a = 0;
thread t1(f, a);
t1.join();
cout << a << endl;
}
编译会发生错误
所以要传递引用的话要使用 std::ref 进行传递
thread t1(f, std::ref(a));
就可编译通过
输出
1
1
同理, 使用std::bind想传递引用时也是一样的
以上只是我很浅显的记录了一下 std::ref 的使用场景以及使用方法, 仅供参考,以后有时间会研究一下它的具体实现来更新这个简记