2

字符串erase(pos,len)函数的文档并没有非常清楚地说明如果pos恰好是字符串的“one-past-end”会发生什么。它只是暗示这不是禁止的,但没有具体提及这种特殊情况的含义。

确实,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。然后该函数用长度*this为的size() - xlen字符串替换pos由”*this*thispos + xlen

于 2013-02-24T10:43:25.937 回答
2

它写在你的链接中

如果 pos 大于字符串长度,则抛出 out_of_range 异常。

我认为这回答了这个问题。

于 2013-02-24T10:33:58.950 回答