2

文字列erase(pos,len)関数のドキュメントでは、文字列のpos「過去の末尾」が発生した場合に正確に何が起こるかを明確に指定していません。これは禁止されていないことをほのめかしているだけで、この特別なケースが何を意味するのかについては特に言及していません。

実際、str.erase(str.size())例外をスローしません。

この場合、実際に何が起こると考えられますか?これはどこにも明示的に言及されていないようです。

4

2 に答える 2

3

その「特別なケース」ではありません。何もしないのと
同じです。すべての文字を最後から最後まで削除するように指示しています。何も消去しません。str.erase(0,0);str.erase(str.size());

C++11 §21.4.6.5: 「効果: 削除する文字列の有効長をとxlenの小さい方として決定します。この関数は、 によって制御される文字列を、 によって制御される元の文字列の最初の要素のコピーである長さの文字列で置き換えます。残りの要素は、位置 で始まるによって制御される元の文字列の要素のコピーです。 」nsize() - pos*thissize() - xlenpos*this*thispos + xlen

于 2013-02-24T10:43:25.937 に答える
2

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.

于 2013-02-24T10:33:58.950 に答える