C++標準異常類主要包括std::exception
及其派生類,它們用于在程序中處理異常情況。以下是一些常見的使用場景:
#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;
}
#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;
}
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;
}
#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;
}
#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++標準異常類提供了一種靈活的方式來處理程序中的異常情況,有助于提高代碼的健壯性和可維護性。