字符串erase(pos,len)函数的文档并没有非常清楚地说明如果pos
恰好是字符串的“one-past-end”会发生什么。它只是暗示这不是禁止的,但没有具体提及这种特殊情况的含义。
确实,str.erase(str.size())
不会抛出异常。
在这种情况下真正应该发生什么?这似乎没有在任何地方明确提及。
字符串erase(pos,len)函数的文档并没有非常清楚地说明如果pos
恰好是字符串的“one-past-end”会发生什么。它只是暗示这不是禁止的,但没有具体提及这种特殊情况的含义。
确实,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
它写在你的链接中
如果 pos 大于字符串长度,则抛出 out_of_range 异常。
我认为这回答了这个问题。