在以下代码中,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;
}
答案 0 :(得分:5)
错误消息告诉您实际问题是引用包装器没有默认构造函数。你可以将一个参考包装器分配给另一个参考包装器,但是你不能做一个&#34;空的&#34;首先是引用包装器,然后然后通过赋值给它一个值。
答案 1 :(得分:2)
reference_wrapper,因为它的名字应该引用一些对象。所以它没有默认的构造函数。