我正在阅读std::basic_string::reserve(size_type res_arg=0)
上的标准。它说:
void reserve(size_type res_arg=0);
成员函数
reserve()
是一个通知a的指令basic_string
计划更改大小的对象,以便它可以 相应地管理存储分配。效果:
reserve()
之后,capacity()
大于或等于 储备论证。 [注意:使用res_arg调用reserve()
小于capacity()
的参数实际上是非约束性收缩 请求。使用res_arg <= size()
的呼叫实际上是非绑定的 缩小到适合的要求。 - 尾注]如果
,则抛出:length_errorres_arg > max_size()
标准似乎区分了调用reserve()
res_arg < capacity()
和reserve()
调用res_arg <= size()
。
res_arg <= size()
很容易理解,shrink_to_fit()
被调用,实现可以自由地做任何想做的事情,因为它不具有约束力。
但res_arg < capacity()
的案例呢?标准说“非约束性收缩请求”而不是“非绑定收缩适合请求”。收缩适合请求和收缩请求之间有什么区别?这只是一个不幸的不一致吗?
答案 0 :(得分:1)
std::string::shrink_to_fit()
会将capacity()
缩小为size()
。这是不同的,然后将capacity()
缩小为小于capacity()
但大于size()
的数字。实际上
std:string foo = "test";
foo.reserve(20); // capaicty:20 size:4
foo.reserve(10); // capaicty:10 size:4
foo.reserve(20); // capaicty:20 size:4
foo.shrink_to_fit(); // capaicty:04 size:4
答案 1 :(得分:0)