【发布时间】:2015-03-09 23:21:34
【问题描述】:
当pos 参数作为string::npos 传递时,C++11 标准对string& erase (size_t pos = 0, size_t len = npos); 成员函数的行为有何规定?我认为它不应该删除任何内容,但也许它会引发out_of_range 异常?该标准定义的行为是什么?
【问题讨论】:
标签: c++ c++11 stdstring outofrangeexception
当pos 参数作为string::npos 传递时,C++11 标准对string& erase (size_t pos = 0, size_t len = npos); 成员函数的行为有何规定?我认为它不应该删除任何内容,但也许它会引发out_of_range 异常?该标准定义的行为是什么?
【问题讨论】:
标签: c++ c++11 stdstring outofrangeexception
它抛出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.
【讨论】:
它抛出std::out_of_range。见http://en.cppreference.com/w/cpp/string/basic_string/erase。
一般原则是pos 的值在 0 和 size() 之间(即末尾的一个)是可以的,但超出此范围的任何值都表示调用者错误。
【讨论】: