📜  c++ 抛出异常 - C++ (1)

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

C++ 抛出异常

在 C++ 中抛出异常是一种处理错误的方式,可以使程序在发生错误时跳转到指定的异常处理代码。

如何抛出异常

在 C++ 中,可以使用 throw 语句来抛出一个异常,语法如下:

throw exception_type;

其中 exception_type 可以是任意类型,一般情况下会是一个类,用于存储和传递异常信息。

下面是一个例子,抛出一个字符串异常:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    try {
        string message = "Something went wrong";
        throw message;
    }
    catch(string &e) {
        cout << "Exception caught: " << e << endl;
    }
}

在上面的例子中,我们用 string 类型来存储异常信息,然后使用 throw 语句抛出异常。在 try 块中捕获异常,并输出异常信息。

如何捕获异常

在 C++ 中,可以使用 trycatch 块来捕获异常,并在捕获到异常时执行相应的处理逻辑。

try {
    // 代码块
}
catch(exception_type &e) {
    // 处理逻辑
}

其中 exception_type 是异常类型,可以是任意类型(包括基本数据类型和自定义类型),用于匹配抛出的异常。在 catch 块中的代码会在捕获到异常时执行。

下面是一个例子,使用 trycatch 块来捕获异常:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    try {
        throw "Something went wrong";
    }
    catch(const char *e) {
        cout << "Exception caught: " << e << endl;
    }
}

在上面的例子中,我们用 const char* 类型来抛出异常,然后在 catch 块中使用相同的类型捕获异常。在捕获到异常时,输出异常信息。

自定义异常

除了使用标准异常类型(如 stringconst char*),在 C++ 中还可以自定义异常类型来传递额外的信息。

自定义异常类型必须继承自 std::exception 类,例如:

#include <exception>

class MyException: public std::exception
{
public:
    const char* what() const throw()
    {
        return "My Exception occurred";
    }
};

在上面的例子中,我们自定义了一个类 MyException,继承自 std::exception。这个类包含一个 what() 函数,用于返回异常信息。

然后可以使用 throw 语句来抛出自定义异常:

throw MyException();

在捕获自定义异常时,可以使用相同的类型来匹配捕获:

catch(MyException &e) {
    cout << "Exception caught: " << e.what() << endl;
}

在上面的例子中,我们使用 MyException 类型来捕获自定义异常,并通过 what() 函数输出异常信息。

异常传递

在函数中抛出异常时,可以将异常传递给调用函数,直到被捕获或者到达 main() 函数为止。如果异常没有被捕获,程序会终止并输出异常信息。

下面是一个例子:

#include <iostream>

using namespace std;

void func()
{
    throw "Exception occurred in func()";
}

void caller()
{
    try {
        func();
    }
    catch(const char *e) {
        cout << "Exception caught: " << e << endl;
        throw;  // 继续抛出异常
    }
}

int main()
{
    try {
        caller();
    }
    catch(const char *e) {
        cout << "Exception caught in main(): " << e << endl;
    }
}

在上面的例子中,函数 func() 抛出了一个字符串异常,函数 caller() 捕获并输出异常信息,并继续抛出异常。然后在 main() 函数中捕获异常并输出异常信息。

小结

抛出异常是一种处理错误的方式,可以使程序在发生错误时跳转到指定的异常处理代码。在 C++ 中,可以使用 throw 语句来抛出一个异常,使用 trycatch 块来捕获异常。除了使用标准异常类型,还可以自定义异常类型来传递额外的信息。在函数中抛出异常时,可以将异常传递给调用函数,直到被捕获或者到达 main() 函数为止。