[英]std::vector::resize(size_type) requires CopyInsertable?
这个问题是在我回答另一个问题的时候提出的 。
N3337 23.3.6.3“向量容量”表示(见770页):
void resize(size_type sz);
E ff ects:如果
sz <= size()
,相当于erase(begin() + sz, end());
。 如果size() < sz
,则将sz - size()
值初始化元素追加到序列中。要求:T应为CopyInsertable到* this。
然而, clang ++表示虽然T不可复制但也没关系。 我认为resize(size_type)
只需要可销毁/可移动/默认可构造是有道理的。 如果size() < sz
,它会在sz <= size
,appends(使用默认构造,如果容量不足则销毁和移动)时销毁。
什么是真理? 这是标准缺陷吗? 或者这是clang ++和我的错误吗?
你是对的。 这是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()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.