使用std::ref可以在模板传参的时候传入引用,thread的方法传递引用的时候,否则无法传递。
例 在 thread 中使用引用,未使用ref()
#include <iostream>
#include <thread>
using namespace std;
void f(int &i) {
for (int j = 0; j < i; j++) {
cout << i << endl;
}
}
int main() {
int i = 5;
thread t(f, i);//引用未使用ref(i);
t.join();
}
报错
修改后
#include <iostream>
#include <thread>
using namespace std;
void f(int &i) {
for (int j = 0; j < i; j++) {
cout << i << endl;
}
}
int main() {
int i = 5;
thread t(f, ref(i));
t.join();
}
ref()方法的返回值是reference_wrapper类型,这个类的源码大概的意思就是维持一个指针,并且重载操作符