文字列erase(pos,len)関数のドキュメントでは、文字列のpos
「過去の末尾」が発生した場合に正確に何が起こるかを明確に指定していません。これは禁止されていないことをほのめかしているだけで、この特別なケースが何を意味するのかについては特に言及していません。
実際、str.erase(str.size())
例外をスローしません。
この場合、実際に何が起こると考えられますか?これはどこにも明示的に言及されていないようです。
文字列erase(pos,len)関数のドキュメントでは、文字列のpos
「過去の末尾」が発生した場合に正確に何が起こるかを明確に指定していません。これは禁止されていないことをほのめかしているだけで、この特別なケースが何を意味するのかについては特に言及していません。
実際、str.erase(str.size())
例外をスローしません。
この場合、実際に何が起こると考えられますか?これはどこにも明示的に言及されていないようです。
その「特別なケース」ではありません。何もしないのと
同じです。すべての文字を最後から最後まで削除するように指示しています。何も消去しません。str.erase(0,0);
str.erase(str.size());
C++11 §21.4.6.5: 「効果: 削除する文字列の有効長をと
xlen
の小さい方として決定します。この関数は、 によって制御される文字列を、 によって制御される元の文字列の最初の要素のコピーである長さの文字列で置き換えます。残りの要素は、位置 で始まるによって制御される元の文字列の要素のコピーです。 」n
size() - pos
*this
size() - xlen
pos
*this
*this
pos + xlen
It's written in your link that
If pos is greater than the string length, an out_of_range exception is thrown.
I think that answers the question.