c++11 std::ref std::cref

Posted exciting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++11 std::ref std::cref相关的知识,希望对你有一定的参考价值。

参考:

C++已经有了引用操作符&为什么C++11还要引入std:ref

std::ref和std::cref使用

 

&是类型说明符,而std::ref是一个函数,返回std::reference_wrapper(类似于指针)

为什么需要std::ref?(std::cref类似)

主要是考虑到c++11中的函数式编程,例如:std::bind

std::bind在使用时,是对参数直接拷贝,而不是引用

 

发现这个问题的契机是在使用thread的标准库时

#include<iostream>
#include<thread>
#include<string>

using namespace std;

void foo( int &a)

    cout<<"thread :"<< a++ <<endl;


int main()

    int num = 0;
    thread t1(foo, std::ref(num));
    thread t2(foo, std::ref(num));
    t1.join();
    t2.join();
    return 0;

默认是按值传递,需要通过std::ref按引用传递

技术图片

 

以上是关于c++11 std::ref std::cref的主要内容,如果未能解决你的问题,请参考以下文章

c++11 为什么使用ref,和引用的区别

std::ref用法以及和&引用区别

C++11多线程笔记

C++ std::ref() 函数使用详解

clang++ mac os x c++11 链接器问题

第7章 按值传递或按引用传递:7.3 使用std::ref()和std::cref()