1

タイトルが言うように:

新しいサイズが古いサイズと同じ場合、標準は 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?
4

2 に答える 2

4

いいえ、保証はありません。実装、文字列を新しいバッファに再割り当てして、そのを減らすことができますcapacity()

標準は言う:

効果*this:次のように指定された文字列の長さを変更します。

—の場合n <= size()、関数は、で指定され*thisた文字列を、で指定された元の文字列の初期要素のコピーである要素を持つ長さnの文字列に置き換えます*this

—の場合n > size()、関数は、で指定され*thisた文字列を長さnの文字列に置き換えます。この文字列の最初のsize()要素は、で指定された元の文字列のコピーで*thisあり、残りの要素はすべてcに初期化されます。

于 2012-07-09T11:01:53.820 に答える
1

ISO/IEC 14882:2011(E) § 21.4.4:

void resize(size_type n, charT c);

必須: n <= max_size()

スロー: n > max_size() の場合、length_error。

効果: *this で指定された文字列の長さを次のように変更します。

  • n <= size() の場合、関数は、*this で指定された文字列を、*this で指定された元の文字列の最初の要素のコピーである長さ n の文字列に置き換えます。
  • n > size() の場合、関数は *this で指定された文字列を長さ n の文字列に置き換えます。この文字列の最初の size() 要素は、*this で指定された元の文字列のコピーであり、残りの要素はすべて c に初期化されます。
于 2012-07-09T11:03:52.673 に答える