c++11 為什麼使用ref,和引用的區別
阿新 • • 發佈:2019-02-17
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