当string& erase (size_t pos = 0, size_t len = npos);
参数作为pos
传递时,C ++ 11标准为string::npos
成员函数的行为指定了什么?我认为它应该删除任何内容,但也许它会引发out_of_range
异常呢?标准的定义行为是什么?
答案 0 :(得分:3)
它抛出std::out_of_range
,正如标准中明确规定的那样:
21.4.6.5 basic_string :: erase [ string :: erase ]
<强>的basic_string&安培;擦除(size_type pos = 0,size_type n = npos);
需要:
pos <= size()
投掷:
out_of_range
如果pos > size()
。效果:确定要删除的字符串的有效长度
xlen
作为
较小的n
和size() - pos
。然后该函数替换字符串 由*this
控制,其长度为size() - xlen
,第一个字符串pos
元素是原始字符串的初始元素的副本 由*this
控制,其余元素是其副本 从*this
开始控制的原始字符串的元素 位置pos + xlen
。返回:
*this
。
答案 1 :(得分:1)
抛出std::out_of_range
。请参阅http://en.cppreference.com/w/cpp/string/basic_string/erase。
一般原则是pos
在0和size()
之间的值(即结束后的一个)很好,但除此之外的任何值都表示来电错误。