C++ 异常处理

C++ 异常

在执行 C++ 代码时,可能会发生不同的错误:程序员编写的编码错误、错误输入引起的错误或其他不可预见的事情。

当发生错误时,C++ 通常会停止并生成错误消息。这个术语的技术术语是:C++ 会抛出异常(抛出错误)。


C++ try 与 catch

C++ 中的异常处理由三个关键字组成: try, throwcatch:

try 语句让您定义要在执行时测试错误的代码块。

throw 关键字在检测到问题时引发异常,这让我们可以创建自定义错误。

catch 语句允许您定义要执行的代码块(如果 try 块中出现错误)。

trycatch 关键字成对出现:

实例
  1. try {
  2. // 要尝试的代码块
  3. throw exception; // 出现问题时抛出异常
  4. }
  5. catch () {
  6. // 处理错误的代码块
  7. }

思考下面的例子:

实例
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. try {
  5. int age = 15;
  6. if (age >= 18) {
  7. cout << "Access granted - you are old enough.";
  8. } else {
  9. throw (age);
  10. }
  11. }
  12. catch (int myNum) {
  13. cout << "Access denied - You must be at least 18 years old.\n";
  14. cout << "Age is: " << myNum;
  15. }
  16. return 0;
  17. }
实例解释

我们使用 try 代码块测试一些代码:如果 age 变量小于 18,我们将抛出一个异常,并在 catch 块中处理它。

catch 代码块中,我们捕获错误并进行处理。catch 语句使用一个 parameter 参数:在我们的实例中,我们使用一个 int 变量(myNum)(因为我们在 try 代码块(age)中抛出一个 int 类型的异常)来输出 age 的值。

如果没有发生错误(例如,如果 age 是 20 岁而不是 15 岁,这意味着年龄将大于 18 岁),则跳过 catch 块:

实例
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. try {
  5. int age = 20;
  6. if (age >= 18) {
  7. cout << "Access granted - you are old enough.";
  8. } else {
  9. throw (age);
  10. }
  11. }
  12. catch (int myNum) {
  13. cout << "Access denied - You must be at least 18 years old.\n";
  14. cout << "Age is: " << myNum;
  15. }
  16. return 0;
  17. }

您还可以使用 throw 关键字输出参考数字,例如用于自定义错误号/代码:

实例
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. try {
  5. int age = 15;
  6. if (age >= 18) {
  7. cout << "Access granted - you are old enough.";
  8. } else {
  9. throw 505;
  10. }
  11. }
  12. catch (int myNum) {
  13. cout << "Access denied - You must be at least 18 years old.\n";
  14. cout << "Error number: " << myNum;
  15. }
  16. return 0;
  17. }

处理任务类型的异常 (…)

如果不知道 try 代码块中使用的 throw 抛出的 类型,可以在 catch 块内部使用 "三点" 语法(),它将处理任何类型的异常:

实例
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. try {
  5. int age = 15;
  6. if (age >= 18) {
  7. cout << "Access granted - you are old enough.";
  8. } else {
  9. throw 505;
  10. }
  11. }
  12. catch (...) {
  13. cout << "Access denied - You must be at least 18 years old.\n";
  14. }
  15. return 0;
  16. }