Łuk*_*Lew 20 c++ move-semantics c++11
移动无法在std :: array上高效实现(O(1)),为什么它有移动构造函数?
jua*_*nza 28
std::array
有一个编译器生成的移动构造函数,它允许将一个实例的所有元素移动到另一个实例中.如果元素可以有效移动或者它们只是可移动的话,这很方便:
#include <array>
#include <iostream>
struct Foo
{
Foo()=default;
Foo(Foo&&)
{
std::cout << "Foo(Foo&&)\n";
}
Foo& operator=(Foo&&)
{
std::cout << "operator=(Foo&&)\n";
return *this;
}
};
int main()
{
std::array<Foo, 10> a;
std::array<Foo, 10> b = std::move(a);
}
Run Code Online (Sandbox Code Playgroud)
所以我想说std::array
应该有一个移动复制构造函数,特别是因为它是免费的.没有人会要求它被积极禁用,我看不出任何好处.