-2

在下面的代码中,push_back()a std::refinto astd::vector<reference_wrapper<Type>>效果很好,但是将 a 分配std::ref给 areference_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;
}
4

2 回答 2

6

错误消息告诉您,实际问题是引用包装器没有默认构造函数。您可以将一个引用包装器分配给另一个引用包装器,但您不能先创建一个“空”引用包装器,然后通过赋值为其赋值。

于 2014-07-25T22:19:57.653 回答
2

从其名称得出的reference_wrapper 将引用某个对象。所以它没有默认构造函数。

于 2014-07-25T22:20:05.937 回答