std::ref 简记

默认分类 · 2024-09-22 · 114 人浏览

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 的使用场景以及使用方法, 仅供参考,以后有时间会研究一下它的具体实现来更新这个简记

Theme Jasmine by Kent Liao