📅  最后修改于: 2023-12-03 15:14:00.374000             🧑  作者: Mango
在 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++ 中,可以使用 try
和 catch
块来捕获异常,并在捕获到异常时执行相应的处理逻辑。
try {
// 代码块
}
catch(exception_type &e) {
// 处理逻辑
}
其中 exception_type
是异常类型,可以是任意类型(包括基本数据类型和自定义类型),用于匹配抛出的异常。在 catch
块中的代码会在捕获到异常时执行。
下面是一个例子,使用 try
和 catch
块来捕获异常:
#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
块中使用相同的类型捕获异常。在捕获到异常时,输出异常信息。
除了使用标准异常类型(如 string
和 const 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
语句来抛出一个异常,使用 try
和 catch
块来捕获异常。除了使用标准异常类型,还可以自定义异常类型来传递额外的信息。在函数中抛出异常时,可以将异常传递给调用函数,直到被捕获或者到达 main()
函数为止。