如何捕获子异常

How to catch substr exception?

本文关键字:异常 何捕获      更新时间:2023-10-16

我正在使用substr来生成子字符串。如何捕获子异常?例如:

terminate called after throwing an instance of 'std::out_of_range'

像这样:

try
{
  /// use substr
}
catch( std::out_of_range& exception )
{
   // print out an error, and fail, or restart if appropriate.
}
try
{
    std::string sub = mystring.substr(10,1);
}
catch (std::out_of_range & ex)
{
    cout << "caught exception!" << endl;
}

如果 substr 的第一个参数(子字符串的起始位置)大于要应用于的字符串的长度,则会引发超出范围的异常:

string s = "foo";
s.substr( 1 );   // ok
s.substr( 5 );   // exception

因此,显而易见的解决方案是不要在可能发生第二种情况的地方编写代码。