正如标题所说:
标准是否保证,如果新大小与旧大小相同,std :: string :: resize将不会执行任何操作?
当然,我可以测试它,但它可能是UB,所以测试在这里不起作用。
在cppreference.com和cplusplus.com中,文档对此案例一无所知
示例:
std::string s( "asd" );
// s.size() is 3
s.resize( 3 ); // will this affect **somehow** the string?
答案 0 :(得分:4)
不,没有保证。实现可以将字符串重新分配到新缓冲区,以减少其capacity()
。
标准说:
效果:更改
*this
指定的字符串的长度,如下所示:- 如果
n <= size()
,该函数将*this
指定的字符串替换为长度为n的字符串,其元素是*this
指定的原始字符串的初始元素的副本。- 如果
n > size()
,该函数将*this
指定的字符串替换为长度为n的字符串,其第一个size()
元素是{{1}指定的原始字符串的副本},其余的元素都被初始化为c。
答案 1 :(得分:1)
ISO / IEC 14882:2011(E)§21.4.4:
void resize(size_type n, charT c);
需要: n&lt; = max_size()
抛出: length_error如果n&gt; MAX_SIZE()。
效果:改变* this指定的字符串的长度,如下所示: