Reference_wrapper:Push_back有效,但没有分配

时间:2014-07-25 22:17:10

标签: c++ c++11 stdvector reference-wrapper

在以下代码中,push_back() std::ref中的std::vector<reference_wrapper<Type>>效果很好,但为std::ref分配reference_wrapper<Type>不起作用。为什么呢?

#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;
}

2 个答案:

答案 0 :(得分:5)

错误消息告诉您实际问题是引用包装器没有默认构造函数。你可以将一个参考包装器分配给另一个参考包装器,但是你不能做一个&#34;空的&#34;首先是引用包装器,然后然后通过赋值给它一个值。

答案 1 :(得分:2)

reference_wrapper,因为它的名字应该引用一些对象。所以它没有默认的构造函数。