繁体   English   中英

std :: vector :: resize(size_type)需要CopyInsertable吗?

[英]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应为MoveInsertableDefaultInsertable*this

Destructible的要求在表95中,适用于所有容器上的所有操作,而不仅仅是resize()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM