C++ 异常
异常
正如在 C++ 错误 章节中提到的,程序运行时可能发生不同类型的错误——例如编码错误、无效输入或意外情况。
当发生错误时,C++ 通常会停止并生成一条错误消息。这的技术术语是:C++ 会抛出一个异常(抛出一个错误)。
异常处理 (try 和 catch)
异常处理允许您在运行时捕获和处理错误 - 这样您的程序就不会崩溃。
它使用三个关键字:
try- 定义要测试的代码throw- 触发异常catch- 处理错误
实例
try {
// 可能抛出异常的代码
throw 505;
}
catch (int errorCode) {
cout << "发生错误:" << errorCode;
}
在这里,程序抛出一个值为 505 的异常,该异常在 catch 块中被捕获和处理。
实际应用示例:年龄检查
我们可以使用异常处理来检查用户是否达到年龄要求:
实例
try {
int age = 15;
if (age >= 18) {
cout << "访问已授权 - 您已达到年龄要求。";
} else {
throw (age);
}
}
catch (int myNum) {
cout << "访问被拒绝 - 您必须至少年满 18 岁。\n";
cout << "年龄:" << myNum;
}
示例解释
我们使用 try 块来测试一些代码:如果 age 变量小于 18,我们将抛出一个异常,并在 catch 块中处理它。
在 catch 块中,我们捕获错误并对其进行处理。catch 语句接受一个参数:在我们的示例中,我们使用一个 int 变量 (myNum)(因为我们在 try 块中抛出了 int 类型的异常 (age)),来输出 age 的值。
如果没有发生错误(例如,如果 age 是 20 而不是 15,这意味着它将大于 18),catch 块将被跳过:
实例
int age = 20;
您也可以使用 throw 关键字输出来一个引用编号,例如用于组织目的的自定义错误编号/代码(在我们的示例中是 505):
实例
try {
int age = 15;
if (age >= 18) {
cout << "访问已授权 - 您已达到年龄要求。";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "访问被拒绝 - 您必须至少年满 18 岁。\n";
cout << "错误编号:" << myNum;
}
处理任何类型的异常 (...)
如果您不知道 try 块中使用的 throw 类型,可以在 catch 块中使用"三点"语法 ...,它将处理任何类型的异常:
实例
try {
int age = 15;
if (age >= 18) {
cout << "访问已授权 - 您已达到年龄要求。";
} else {
throw 505;
}
}
catch (...) {
cout << "访问被拒绝 - 您必须至少年满 18 岁。\n";
}