C2280 STD :: vector的默认构造函数尽管具有移动构造函数,但仍需要元素的复制构造函数

c2280 default constructor for std::vector requires copy constructor for elements despite having move constructor

本文关键字:构造函数 复制 元素 移动 vector STD 默认 C2280      更新时间:2023-10-16

标题说明了一切,在什么情况下,默认构造函数 sTD :: vector需要一个元素的复制构造函数,而不仅不接受移动构造函数?我正在明确删除复制构造函数,并使用VS2017明确默认移动构造函数。

在C 11之前,std::vector要求该元素类型可复制构造且可复制。

从C 11开始,std::vector的元素类型的类型要求已削弱,std::vector现在仅需要元素类型完成(直到C 17(,并且可以通过给定的分配器擦除。p>调用某些成员功能可能会对元素类型施加其他要求。但是,默认构造函数不是其中之一。

这意味着元素类型不需要具有默认构造的复制构建器来构造 - 实际上,您可以默认构造具有根本不可构造的元素类型的std::vector(请参阅此处(。