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";
}

亲自试一试