2014-07-25 32 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,因为它的名字应该引用一些对象。所以它没有默认的构造函数。

相关问题