温馨提示×

C++标准异常类的使用场景

c++
小樊
81
2024-11-08 22:55:28
栏目: 编程语言

C++标准异常类主要包括std::exception及其派生类,它们用于在程序中处理异常情况。以下是一些常见的使用场景:

  1. 错误处理:当程序遇到不可恢复的错误时,可以抛出异常。例如,文件打开失败、内存分配失败等。
#include <iostream>
#include <fstream>
#include <exception>

int main() {
    std::ifstream file("non_existent_file.txt");
    if (!file) {
        throw std::runtime_error("Unable to open file");
    }
    // 正常处理文件的代码
    return 0;
}
  1. 输入验证:在处理用户输入或外部数据时,可以使用异常来确保数据的合法性。
#include <iostream>
#include <stdexcept>

int main() {
    int age;
    std::cout << "Enter your age: ";
    std::cin >> age;

    if (age < 0) {
        throw std::invalid_argument("Age cannot be negative");
    }

    // 正常处理年龄的代码
    return 0;
}
  1. 资源管理:在C++中,可以使用异常来确保资源的正确释放。例如,当new操作失败时,会抛出std::bad_alloc异常。
#include <iostream>
#include <new>

int main() {
    try {
        int* largeArray = new int[1000000];
        // 使用数组的代码
        delete[] largeArray;
    } catch (const std::bad_alloc& e) {
        std::cerr << "Memory allocation failed: " << e.what() << std::endl;
    }
    return 0;
}
  1. 自定义异常类:可以根据需要创建自定义异常类,以便更精确地表示特定的错误情况。
#include <iostream>
#include <exception>

class FileFormatError : public std::runtime_error {
public:
    FileFormatError(const std::string& message) : std::runtime_error(message) {}
};

int main() {
    try {
        // 读取文件并检查格式
        if (!fileFormatValid) {
            throw FileFormatError("Invalid file format");
        }
    } catch (const FileFormatError& e) {
        std::cerr << "File format error: " << e.what() << std::endl;
    }
    return 0;
}
  1. 异常传播:在复杂的程序中,可以使用异常来传播错误,以便在更高的层次上处理异常。
#include <iostream>
#include <exception>

class NetworkError : public std::runtime_error {
public:
    NetworkError(const std::string& message) : std::runtime_error(message) {}
};

class ServerError : public NetworkError {
public:
    ServerError(const std::string& message) : NetworkError(message) {}
};

int main() {
    try {
        // 尝试连接服务器
        if (!connectToServer()) {
            throw ServerError("Failed to connect to server");
        }
    } catch (const ServerError& e) {
        std::cerr << "Server error: " << e.what() << std::endl;
    }
    return 0;
}

总之,C++标准异常类提供了一种灵活的方式来处理程序中的异常情况,有助于提高代码的健壮性和可维护性。

0