正如标题所说:
如果新大小与旧大小相同,标准是否保证 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?
不,没有任何保证。实现可以将字符串重新分配到新缓冲区,以减少其capacity()
.
标准说:
效果:改变指定字符串的长度,
*this
如下所示:— 如果
n <= size()
,该函数用*this
长度为 n 的字符串替换由 指定的字符串,其元素是由 指定的原始字符串的初始元素的副本*this
。— 如果
n > size()
,该函数用*this
长度为 n 的字符串替换由 指定的字符串,该字符串的第一个size()
元素是由 指定的原始字符串的副本,*this
其余元素全部初始化为 c。
ISO/IEC 14882:2011(E) § 21.4.4:
void resize(size_type n, charT c);
要求: n <= max_size()
抛出:如果 n > max_size(),则为 length_error。
效果:改变 *this 指定的字符串的长度,如下所示: