当调用 str.erase 时"pos"等于字符串的长度时会发生什么?
What happens when calling the str.erase with "pos" equal to the string's length?
字符串擦除(pos,len)函数的文档没有非常清楚地指定如果pos
恰好是字符串的"一个过去的末端",会发生什么。它只是暗示这不是禁止的,但没有具体提及这种特殊情况的含义。
事实上,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
控制的原始字符串的初始元素的副本,并且其剩余元素是从位置pos + xlen
开始的由*this
控制的原始串的元素的副本”
在您的链接中,
如果pos大于字符串长度,则抛出out_of_range异常。
我认为这回答了问题。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 除以 str.length() 什么也没显示
- 'for (auto c : str)' c到底是什么?
- '(c = *str) != 0' 是什么意思?
- Stringstream STR函数有什么问题
- 字符串中的 cin>>str+1 是什么C++?
- std::stringstream "str"什么都不返回?
- 直接使用Str.c_str()和使用它初始化const char *的区别是什么?
- CW2A(LPCWSTR)str)和CW2A(LPCWSTR)str, CP_UTF8)之间的区别是什么?
- 当调用 str.erase 时"pos"等于字符串的长度时会发生什么?