当调用 str.erase 时"pos"等于字符串的长度时会发生什么?

What happens when calling the str.erase with "pos" equal to the string's length?

本文关键字:什么 str 调用 erase pos 字符串      更新时间:2023-10-16

字符串擦除(pos,len)函数的文档没有非常清楚地指定如果pos恰好是字符串的"一个过去的末端",会发生什么。它只是暗示这不是禁止的,但没有具体提及这种特殊情况的含义。

事实上,str.erase(str.size())不会抛出异常。

在这种情况下,真正应该发生什么?这似乎在任何地方都没有明确提及。

这不是那种"空间大小写"
str.erase(0,0);相同,不会有任何作用。str.erase(str.size());告诉它从末尾到末尾删除所有字符。它们什么都不擦除。

C++11§21.4.6.5:“效果:将要删除的字符串的有效长度xlen确定为nsize() - pos中较小的一个。然后,该函数将由*this控制的字符串替换为长度为size() - xlen的字符串,该字符串的第一个pos元素是由*this控制的原始字符串的初始元素的副本,并且其剩余元素是从位置pos + xlen开始的由*this控制的原始串的元素的副本”

在您的链接中,

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

我认为这回答了问题。