卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章74458本站已运行437

C++ 函数库与标准模板库的异常处理机制

c++++ 函数库和标准模板库提供的异常处理机制可以有效处理程序运行时发生的错误事件。c++ 函数库使用 try-catch 语法抛出和捕获异常,而标准模板库 (stl) 容器通过异常类处理错误,例如 std::out_of_range 和 std::runtime_error。通过抛出和捕获异常,代码可以在异常情况下仍能正常执行,确保程序在发生错误时能优雅地退出。

C++ 函数库与标准模板库的异常处理机制

C++ 函数库与标准模板库的异常处理机制

异常处理是处理异常情况的一种机制,即程序运行时发生的错误事件。C++ 函数库和标准模板库提供了强大的异常处理机制,确保代码在发生异常时仍能正常执行。

C++ 函数库异常处理

立即学习“C++免费学习笔记(深入)”;

C++ 函数库使用以下语法来定义和抛出异常:

try {
  // 代码块可能会抛出异常
  throw exception_object;
} catch (exception_type &e) {
  // 捕获特定类型异常并处理
}

例如:

#include <iostream>

int main() {
  try {
    int i = 5, j = 0;
    float x = i / j; // 会抛出 std::runtime_error 异常
  } catch (std::runtime_error &e) {
    std::cout << "发生异常:" << e.what() << std::endl;
  }
  return 0;
}

标准模板库异常处理

标准模板库 (STL) 提供以下异常类:

  • std::exception:异常基类
  • std::length_error:容器越界或大小错误
  • std::bad_alloc:内存分配失败
  • std::logic_error:逻辑错误,如无效参数或状态

STL 容器使用异常来处理错误。例如:

#include <vector>

int main() {
  std::vector<int> v;
  try {
    v.at(10); // 会抛出 std::out_of_range 异常
  } catch (std::out_of_range &e) {
    std::cout << "索引越界:" << e.what() << std::endl;
  }
  return 0;
}

实战案例

考虑以下读写文件的代码:

#include <fstream>

void readWriteFile() {
  std::string filename = "test.txt";
  std::ifstream in(filename);
  if (!in.is_open()) {
    throw std::runtime_error("无法打开文件 " + filename);
  }

  std::ofstream out("test_copy.txt");
  if (!out.is_open()) {
    throw std::runtime_error("无法创建文件 test_copy.txt");
  }

  std::string line;
  while (std::getline(in, line)) {
    out << line << std::endl;
  }
}

在这个例子中,当打开文件失败时,代码抛出一个异常,然后可以在 main 函数中捕获和处理该异常。这种异常处理机制确保程序即使在异常情况下也能优雅地退出。

卓越飞翔博客
上一篇: Asciinema 与 Savvy CLI:终端记录工具
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏