12

我们如何为被包裹的项目赋值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<_Tp>::reference_wrapper(_Tp&&) [with _Tp = int]'

4

1 回答 1

14

使用get()成员函数:

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

是 的所有成员函数的列表std::reference_wrapper。因为一个operator=

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

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

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

于 2013-03-17T17:21:54.980 回答