2014-07-25 71 views
-2

在下面的代碼,push_back()一個std::refstd::vector<reference_wrapper<Type>>效果很好但是,分配std::refreference_wrapper<Type>不起作用。爲什麼?的reference_wrapper:作品的push_back但不分配

#include <iostream> 
#include <vector> 
#include <functional> 
using namespace std; 

struct Type {}; 

int main() 
{ 
    Type t1; 

    vector<reference_wrapper<Type>> t2; 
    t2.push_back(ref(t1)); // OK 

    //reference_wrapper<Type> t3; // error: no matching function for call to std::reference_wrapper<Type>::reference_wrapper()’ 
    //t3 = ref(t1); 

    return 0; 
} 
+0

你試圖默認構造一個引用包裝器,它究竟是指什麼,如果這是允許的?問題的標題與錯誤無關。 – Praetorian

+2

爲什麼不''reference_wrapper t3 = ref(t1);'? –

回答

5

錯誤消息告訴你實際的問題是引用包裝沒有默認的構造函數。你可以分配一個引用包裝到另一個,但你不能先創建一個「空」參考包裝,然後通過賦值給它一個值。

2

reference_wrapper,因爲它的名字應該引用一些對象。所以它沒有默認的構造函數。

相關問題