【问题标题】:What is the defined behavior of std::string::erase() with a pos of string::npos?位置为 string::npos 的 std::string::erase() 定义的行为是什么?
【发布时间】: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


    【解决方案1】:

    它抛出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.

    【讨论】:

      【解决方案2】:

      它抛出std::out_of_range。见http://en.cppreference.com/w/cpp/string/basic_string/erase

      一般原则是pos 的值在 0 和 size() 之间(即末尾的一个)是可以的,但超出此范围的任何值都表示调用者错误。

      【讨论】:

        猜你喜欢
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 2021-11-01
        • 2016-02-15
        相关资源
        最近更新 更多