这个问题是我回答的时候提出的这是另一个问题 https://stackoverflow.com/questions/30935840/does-the-c-standard-specify-stl-implementation-details-for-the-compiler.
N3337 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf23.3.6.3“向量容量”说(在770页):
无效调整大小(size_type sz);
效果:如果sz <= size()
, 相当于erase(begin() + sz, end());
. If size() < sz
, 附加sz - size()
序列中已初始化值的元素。
要求:T 应可复制插入到 *this 中。
然而,clang++ 说没关系,尽管 T 不可复制。 http://coliru.stacked-crooked.com/a/ada7ceb3f4d3868b我认为这是有道理的resize(size_type)
仅需要可破坏/可移动/默认可构造。它会破坏如果sz <= size
, 追加(使用默认构造,如果容量不够则销毁并移动) ifsize() < sz
.
什么是真理?这是标准缺陷吗?或者这是 clang++ 和我的错误?
你是对的。这是 C++11 中的一个缺陷,已通过以下方式在 C++14 中修复:http://cplusplus.github.io/LWG/lwg-defects.html#2033 http://cplusplus.github.io/LWG/lwg-defects.html#2033
目前的措辞是:
效果: 的sz < size()
,删除最后一个size() - sz
序列中的元素。否则,追加sz - size()
默认插入到序列中的元素。
要求:T
应该MoveInsertable
and DefaultInsertable
into *this
.
的要求Destructible
表 95 中的内容适用于所有容器上的所有操作,而不仅仅是resize()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)