📅  最后修改于: 2023-12-03 14:39:59.592000             🧑  作者: Mango
在 C++ 中,异常是程序执行期间出现的问题或错误,它可以导致程序中断运行。异常处理是指我们如何将程序在异常发生时从错误状态转换为正常状态。
C++ 异常处理通常包括以下步骤:
在 C++ 中,使用 throw
关键字来抛出异常。例如:
throw "Error occurred";
在上面的代码中,我们抛出了一个字符串异常。可以抛出任何类型的异常,包括普通数据类型、类对象、指针等。例如:
int divide(int x, int y)
{
if (y == 0)
{
throw "Divide by zero exception";
}
return x / y;
}
在上面的代码中,如果输入的 y 为 0,则抛出一个异常。
在 C++ 中,使用 try
、catch
和 throw
关键字来捕获异常。例如:
try
{
// 一些代码
throw "Error occurred";
// 一些代码
}
catch (const char* message)
{
cout << "Exception caught: " << message << endl;
}
在上面的代码中,我们使用 try
块包括可能会抛出异常的代码。如果抛出了一个字符串异常,则使用 catch
块捕获该异常并打印错误消息。
在 catch
块中,我们可以使用任何合法的 C++ 代码对异常进行处理。下面是一些例子:
try
{
// 一些代码
throw 42;
// 一些代码
}
catch (const char* message)
{
cout << "Exception caught: " << message << endl;
}
catch (int value)
{
cout << "Exception caught: " << value << endl;
}
在上面的代码中,我们使用两个 catch
块处理不同类型的异常。如果抛出的是一个整数,则第二个 catch
块将捕获该异常。
我们还可以使用多个 catch
块来处理不同类型的异常:
try
{
// 一些代码
throw "Error occurred";
// 一些代码
}
catch (const char* message)
{
cout << "Exception caught: " << message << endl;
}
catch (int value)
{
cout << "Exception caught: " << value << endl;
}
catch (...)
{
cout << "Unknown exception caught" << endl;
}
在上面的代码中,我们使用了一个省略号的 catch
块来捕获所有的异常类型。
C++11 引入了 noexcept
关键字,用来指定一个函数是否可能抛出异常。例如:
int divide(int x, int y) noexcept
{
if (y == 0)
{
throw "Divide by zero exception";
}
return x / y;
}
在上面的代码中,我们使用 noexcept
关键字将 divide
函数标记为可能不会抛出异常。
C++ 异常处理是一种强大的机制,可帮助我们在程序运行时处理各种问题和错误。在使用异常处理时,我们应该注意以下几点:
noexcept
关键字标记可能不会抛出异常的函数。