溫馨提示×

C++標準異常類的使用場景

c++
小樊
81
2024-11-08 22:55:28
欄目: 編程語言

C++標準異常類主要包括std::exception及其派生類,它們用于在程序中處理異常情況。以下是一些常見的使用場景:

  1. 錯誤處理:當(dāng)程序遇到不可恢復(fù)的錯誤時,可以拋出異常。例如,文件打開失敗、內(nèi)存分配失敗等。
#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. 輸入驗證:在處理用戶輸入或外部數(shù)據(jù)時,可以使用異常來確保數(shù)據(jù)的合法性。
#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++中,可以使用異常來確保資源的正確釋放。例如,當(dāng)new操作失敗時,會拋出std::bad_alloc異常。
#include <iostream>
#include <new>

int main() {
    try {
        int* largeArray = new int[1000000];
        // 使用數(shù)組的代碼
        delete[] largeArray;
    } catch (const std::bad_alloc& e) {
        std::cerr << "Memory allocation failed: " << e.what() << std::endl;
    }
    return 0;
}
  1. 自定義異常類:可以根據(jù)需要創(chuàng)建自定義異常類,以便更精確地表示特定的錯誤情況。
#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. 異常傳播:在復(fù)雜的程序中,可以使用異常來傳播錯誤,以便在更高的層次上處理異常。
#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 {
        // 嘗試連接服務(wù)器
        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