捕获后尝试阻止继续

时间:2018-01-24 10:25:26

标签: c++ exception exception-handling

在一个重载的operator[]函数中,我有以下代码块:

try {       
   if (index < 0 || index >= n)
      throw new std::out_of_range("Invalid index!");
   return arr[index];   
}   
catch(std::out_of_range& ex)  { 
   cout << ex.what() << endl;   
}

使用

调用该函数
cout << arr[-1];

会导致未处理 std::out_of_range异常。在检查代码执行后,结果发现在throw之后,执行没有转到catch块,而是直接转到return语句。

我通常不会在同一个函数中捕获异常,这仅用于测试目的,我想了解发生了什么。

1 个答案:

答案 0 :(得分:4)

throw new std::out_of_range("Invalid index!");

throw std::out_of_range("Invalid index!");

要详细说明您的代码,您将捕获std::out_of_range&类型,但会抛出类型std::out_of_range*。正如评论中指出的那样,没有理由不抓住const std::out_of_range&