在一个重载的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
语句。
我通常不会在同一个函数中捕获异常,这仅用于测试目的,我想了解发生了什么。
答案 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&