c2280 std :: vector的默认构造函数需要复制构造函数,尽管有移动构造函数

时间:2017-04-21 15:54:10

标签: c++ c++11

标题说明了这一点,在什么情况下,std :: vector的默认构造函数需要元素的复制构造函数而不接受只有移动构造函数?我明确删除了复制构造函数,并使用VS2017显式默认移动构造函数。

1 个答案:

答案 0 :(得分:0)

在C ++ 11之前,std::vector要求元素类型是可复制构造和可复制的。

从C ++ 11开始,std::vector的元素类型的类型要求被削弱了,std::vector现在只需要元素类型完成(直到C ++ 17)和可由给定的分配器擦除。

但是,调用某些成员函数可能会对元素类型施加额外要求。但是,默认构造函数不是其中之一。

这意味着元素类型不需要让向量的复制构造函数可以默认构造 - 实际上你可以默认构造一个std::vector,其元素类型不是可构造的全部(见here)。