为std :: reference_wrapper赋值

时间:2013-03-17 17:18:56

标签: c++ c++11

我们如何为std::reference_wrapper包裹的项目分配值?

int a[] = {0, 1, 2, 3, 4};

std::vector <std::reference_wrapper<int>> v(a, a+5);

v[0] = 1234;  // Error, can not assign value !

根据错误,直接分配将被删除:

  

错误:使用已删除的功能   'std :: reference_wrapper&lt; _Tp&gt; :: reference_wrapper(_Tp&amp;&amp;)[with _Tp =   INT]'

1 个答案:

答案 0 :(得分:12)

使用get()成员函数:

v[0].get() = 1111; // ok

Herestd::reference_wrapper所有成员函数的列表。由于 operator=

reference_wrapper& operator=( const reference_wrapper<T>& other );

将int literal转换为引用包装器,该包装器失败,并且是您看到的错误消息。

或者,您可以明确调用转化运算符(static_cast<int&>(v[0]) = 1111;),但最好使用上面显示的get()方法。