📜  C++异常处理(1)

📅  最后修改于: 2023-12-03 14:39:59.592000             🧑  作者: Mango

C++异常处理

在 C++ 中,异常是程序执行期间出现的问题或错误,它可以导致程序中断运行。异常处理是指我们如何将程序在异常发生时从错误状态转换为正常状态。

C++ 异常处理通常包括以下步骤:

  1. 抛出异常,即在程序中明确地指出问题所在。
  2. 捕获异常并处理异常,即在程序中对问题进行处理。
  3. 如果无法处理异常,则将其传递给上层调用程序。
抛出异常

在 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++ 中,使用 trycatchthrow 关键字来捕获异常。例如:

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 块来捕获所有的异常类型。

noexcept 关键字

C++11 引入了 noexcept 关键字,用来指定一个函数是否可能抛出异常。例如:

int divide(int x, int y) noexcept
{
    if (y == 0)
    {
        throw "Divide by zero exception";
    }
    return x / y;
}

在上面的代码中,我们使用 noexcept 关键字将 divide 函数标记为可能不会抛出异常。

总结

C++ 异常处理是一种强大的机制,可帮助我们在程序运行时处理各种问题和错误。在使用异常处理时,我们应该注意以下几点:

  1. 避免滥用异常,过多使用异常会导致程序性能下降。
  2. 不要在析构函数中抛出异常。
  3. 使用 noexcept 关键字标记可能不会抛出异常的函数。