gpt4 book ai didi

c++ - std::array 是可 move 的吗?

转载 作者:IT老高 更新时间:2023-10-28 12:36:08 27 4
gpt4 key购买 nike

std::array 可以 move 吗?

Bjarne Native 2012 presentation slides (幻灯片 41)它将 std::array 列为唯一不可 move 的容器之一。

快速浏览 gcc 4.8 库源代码似乎可以确认 std::array 是不可 move 的:

std::vector:

/* @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 的 move-constructor 和 move-assignment 是默认创建的,还是 std::array 不可 move ?如果是不可 move 的,为什么std::array不能 move 而std::vector可以 move ?

最佳答案

std::array 仅当其包含的对象可 move 时才可 move 。

std::array 与其他容器完全不同,因为容器对象包含存储,而不仅仅是指向堆的指针。 move std::vector 只会复制一些指针,而包含的对象并不明智。

是的,std::array 使用默认的 move 构造函数和赋值运算符。作为一个聚合类,不允许定义任何构造函数。

关于c++ - std::array 是可 move 的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14370730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com