使用string :: npos的pos定义std :: string :: erase()的行为是什么?

时间:2015-03-09 23:21:34

标签: c++ c++11 stdstring outofrangeexception

string& erase (size_t pos = 0, size_t len = npos);参数作为pos传递时,C ++ 11标准为string::npos成员函数的行为指定了什么?我认为它应该删除任何内容,但也许它会引发out_of_range异常呢?标准的定义行为是什么?

2 个答案:

答案 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作为
  较小的nsize() - 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()之间的值(即结束后的一个)很好,但除此之外的任何值都表示来电错误。