std::array 是可移动的吗?
In Bjarne Native 2012 演示幻灯片 http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf(幻灯片 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
can?
std::array
仅当其包含的物体可移动时才可移动。
std::array
与其他容器有很大不同,因为容器对象包含存储,而不仅仅是指向堆的指针。移动一个std::vector
只复制一些指针,并且包含的对象并不明智。
Yes, std::array
使用默认的移动构造函数和赋值运算符。作为聚合类,不允许定义任何构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)