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++标准异常类提供了一种灵活的方式来处理程序中的异常情况,有助于提高代码的健壮性和可维护性。