out_of_range和exception
时间: 2023-11-29 10:07:02 浏览: 27
`out_of_range` 是 C++ 标准库中的一种异常类型,表示访问数组容器时索引超出范围。例如,当你尝试访问一个数组的不存在的元素时,就会抛出 `out_of_range` 异常。
`exception` 是 C++ 标准库中的基类异常类型,表示其他类型的异常。当某个异常类型没有特定的标准异常类型与之对应时,可以抛出 `exception` 异常。你可以通过继承 `exception` 类来创建自定义的异常类型。
需要注意的是,`out_of_range` 是 `exception` 的子类,因此任何处理 `exception` 的代码都可以处理 `out_of_range` 异常。但是,如果你只想处理 `out_of_range` 异常,而不处理其他类型的异常,就可以使用单独的 `catch` 块来捕获 `out_of_range` 异常。
相关问题
catch (out_of_range)
这是一个 C++ 中的异常处理语句,用于捕获数组或 STL 容器中的下标越界错误。当程序访问数组或容器的下标超出其所能容纳的范围时,就会抛出 out_of_range 异常,此时可以用 catch (out_of_range) 来捕获并处理该异常。例如:
```
try {
vector<int> v = {1, 2, 3};
int x = v.at(10); // 访问超出容器长度的下标
} catch (out_of_range& e) {
cerr << "Caught exception: " << e.what() << endl;
}
```
在上面的代码中,访问超出容器长度的下标会抛出 out_of_range 异常,然后被 catch 语句捕获,并输出异常信息。
如何捕捉 std::out_of_range 异常
可以使用 try-catch 块来捕捉 std::out_of_range 异常。在 try 块中执行可能引发异常的代码,在 catch 块中捕获并处理异常。示例代码如下:
try {
std::vector<int> vec {1, 2, 3};
int value = vec.at(10); // 这里会抛出 std::out_of_range 异常
} catch (std::out_of_range& e) {
std::cout << "Caught std::out_of_range exception: " << e.what() << std::endl;
}
当 vec 中不存在索引为 10 的元素时,上述代码会抛出 std::out_of_range 异常。在 catch 块中,我们可以使用 e.what() 方法获取异常信息并进行处理。