C ++ STL関数substr(pos、n)の最初のパラメーターposは、この動作をしていると言われています。
「渡された位置が文字列の終わりを超えている場合、out_of_range例外がスローされます。」
しかし、私が次のようなことをすると
string s("ab");
cout<<s.substr(2,666)<<endl;
その場合、pos = 2が定義上文字列の終わりを超えていても、例外はスローされません。
string :: endは、「文字列の最後の文字の後」の位置を「文字列の終わりを過ぎた」と定義します。返される文字は常に「\0」であることに気づきました。私の質問は、これが標準の動作であるかどうか、そしてこの場合は空の文字列が返されるという事実を信頼できるかどうかです。ありがとうございました。