std::array 是可移动的吗?
在Bjarne Native 2012 演示幻灯片(幻灯片 41)中,它std::array
列为唯一不可移动的容器之一。
快速浏览 gcc 4.8 库源代码似乎可以确认它std::array
是不可移动的:
标准::向量:
/* @brief %Vector move constructor.
... */
vector(vector&& __x) noexcept
: _Base(std::move(__x)) { }
而在 std::array 中,唯一接收右值引用参数的方法是随机元素访问,它避免了通过复制返回:
get(array<_Tp, _Nm>&& __arr) noexcept
{ /*...*/ return std::move(get<_Int>(__arr)); }
是std::array
默认创建的移动构造函数和移动分配,还是std::array
不可移动的?如果它是不可移动的,为什么std::array
不能移动而std::vector
可以移动?