std::vector::resize(size_type) requires CopyInsertable?
std::vector::resize(size_type) requires CopyInsertable?
这个问题是在我回答另一个问题时提出的。
N3337 23.3.6.3"矢量容量"说(在770页):
空隙调整大小(size_type sz);
效果:若
sz <= size()
,相当于erase(begin() + sz, end());
。如果size() < sz
,则追加sz - size()
序列中的值初始化元素。要求:T 应可复制插入到 *this 中。
但是,clang++ 说没关系,尽管 T 不可复制。我认为resize(size_type)
只需要可破坏/可移动/默认可构造是有道理的。如果sz <= size
则销毁,如果size() < sz
,则附加(使用默认构造,如果容量不足则销毁和移动)。
什么是真理?是标准缺陷吗?还是叮叮当当和我的错误?
你是对的。这是 C++11 中的一个缺陷,由 http://cplusplus.github.io/LWG/lwg-defects.html#2033 修复了 C++14
目前的措辞是:
效果:如果
sz < size()
,则从序列中擦除最后size() - sz
元素。否则,附加sz - size()
序列中默认插入的元素。要求:
T
应MoveInsertable
并DefaultInsertable
*this
。
对Destructible
的要求如表 95 所示,适用于所有容器上的所有操作,而不仅仅是 resize()
。
相关文章:
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 控制到达非空函数clang(-Wreturn-type)的末尾
- C++20 概念:如何在"requires"子句中引用类名?
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 将系数存储在头文件的数组中("does not name a type"错误)
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- OpenCV CV_16F type
- C++ "错误:在'类 std::result_of< ... >"中没有名为'type'的类型"
- 将内存分配返回值强制转换为 TYPE 数组
- 警告"C++ requires a type specifier for all declaration"地图
- 级运算符 ( "C++ requires a type specifier for all declarations" )
- 柯尼希查找和"C++ requires a type specifier for all declarations"
- 错误"C++ requires a type specifier for all declarations"
- 模板函数"Subscript requires array type",但适用于较小的项目。为什么?