try throw catch
throw抛出异常
与return相似,return是正常的返回,throw是异常的返回。
1.设计自己的异常类型
2.通过if语句判断--throw 抛出异常
3.try调用有throw的函数,catch(指定的错误类型 &e)捕获异常对象
throw抛出异常,catch捕获异常,其中catch捕获与()内类型匹配的异常。
catch(...)可捕获任意类型的异常。
void fun(int x,int y)
{
try
{
if (y != 0)
int t = x / y;
else
throw "y is 0";
//throw y;//throw抛出异常
}
catch (int n)//捕获异常
{
cout << "n = " << n << endl;
}
catch (const char* s)//catch的是throw匹配的异常
{
cout << s << endl;
}
catch (...)//捕获其他异常
{
cout << "error" << endl;
}
}
int main()
{
fun(4, 0);
}
异常的栈展开处理
若抛出的异常在当前函数中没有被捕获(与catch不匹配),则通过逆调用链回到调用它的函数中寻找匹配的catch,若到main中仍未匹配,由系统terminate终止程序。
一旦抛出异常,必须有catch处理。
以下代码:fn中的catch不匹配异常,到main中的catch中找到exception&e匹配
void fn()
{
try
{
throw exception("hello");//异常类
}
catch (int s)
{
cout << s << endl;
}
}
int main()
{
try
{
fn();
}
catch (exception& e)//获取异常对象
{
cout << e.what() << endl;//what()为抛出的异常
}
catch (...)
{
cout << "error" << endl;
}
}
exception是C++标准库中的一个类,用于表示程序中发生的异常情况。它有一个成员函数what(),用于返回异常的描述信息。通常在catch块中使用该函数来获取异常的具体信息,以便进行相应的处理。例如:
try
{
// some code that might throw an exception
}
catch (const std::exception& e)
{
std::cerr << "Exception caught: " << e.what() << std::endl;
}
上述代码中,当try块中的代码抛出一个std::exception类型的异常时,catch块中的e.what()会返回该异常的描述信息,并将其输出到标准错误流中。
常用异常类型
C++ 标准库中定义了多种异常类型,常用的有以下几种:
std::exception
:所有标准异常的基类,可以通过继承该类来创建自定义的异常类型。std::bad_alloc
:内存分配失败时抛出的异常。std::out_of_range
:访问数组、容器等时索引超出范围时抛出的异常。std::logic_error
:逻辑错误时抛出的异常,如:无效的参数、未实现的方法等。std::runtime_error
:运行时错误时抛出的异常,如:文件不存在、网络连接失败等。当程序抛出异常时,可以使用
try-catch
块来捕获并处理异常。例如:复制try { // 可能会抛出异常的代码 } catch (std::exception& e) { // 处理异常的代码 }
需要注意的是,
catch
块的参数类型应该是抛出异常类型的引用,这样才能获取到异常信息。
使用异常处理
1、把错误处理和真正的工作分开来;
2、 代码更易组织,更清晰,复杂的工作任务更容易实现;
3、 更安全了文章来源:https://www.toymoban.com/news/detail-453357.html
4、 使得程序的控制流可以安全的跳转到上层(或者上上层)的错误处理模块中去。文章来源地址https://www.toymoban.com/news/detail-453357.html
到了这里,关于【C++】抛出异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!