1. 程式人生 > >c++11 為什麼使用ref,和引用的區別

c++11 為什麼使用ref,和引用的區別

std::ref只是嘗試模擬引用傳遞,並不能真正變成引用,在非模板情況下,std::ref根本沒法實現引用傳遞,只有模板自動推導型別時,ref能用包裝型別reference_wrapper來代替原本會被識別的值型別,而reference_wrapper能隱式轉換為被引用的值的引用型別。
其中代表的例子是thread
比如thread的方法傳遞引用的時候,必須外層用ref來進行引用傳遞,否則就是淺拷貝。

#include <functional>
#include <iostream>
#include<cstring>
#include<string.h>
#include<memory> #include<atomic> #include<unordered_map> #include<mutex> #include <thread> #include <string> void method(int & a){ a += 5;} using namespace std; int main(){ int a = 0; thread th(method,ref(a)); th.join(); cout << a <<endl; thread th2(method,a); //淺拷貝
th2.join(); cout << a <<endl; return 0; }

輸出:
5
5