C++ <stdexcept>定义的异常类

本文深入解析C++标准库中的stdexcept异常类型,包括exception、runtime_error、range_error等,帮助开发者理解和应对程序运行时的各种错误情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stdexcept

异常名说明
exception最常见的问题
runtime_error只有运行时才能检测出的问题
range_error运行时错误:生成的结果超出了有意义的值域范围
overflow计算上溢
underfolw_error计算下溢
logic_error程序逻辑错误
domain_error逻辑错误:参数对应结果值不存在
invalid_argument逻辑错误:无效参数
length_error逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range逻辑错误:使用一个超出有效范围的值
#include <iostream> #include <fstream> #include <memory> #include <stdexcept> //--------------------------- // 配置文件读取模块 //--------------------------- std::string read_config() { std::ifstream config_file("config.txt"); if (!config_file.is_open()) { throw std::runtime_error("无法打开配置文件"); } std::string config; config_file >> config; return config; } //--------------------------- // CRTP基类模板定义 //--------------------------- template <typename Derived> class BaseProcessor { public: // 公共操作接口 void process() { pre_processing(); static_cast<Derived*>(this)->specific_processing(); post_processing(); } // 公共方法(所有派生类共享) void pre_processing() { std::cout << "[公共前置处理] 初始化资源..." << std::endl; } void post_processing() { std::cout << "[公共后置处理] 清理资源..." << std::endl; } }; //--------------------------- // 具体派生类实现 //--------------------------- class ImageProcessor : public BaseProcessor<ImageProcessor> { public: // 特有实现方法 void specific_processing() { std::cout << "▦ 执行图像特殊处理:边缘检测+色彩校正" << std::endl; } // 派生类特有方法 void generate_thumbnail() { std::cout << "生成缩略图(128x128)" << std::endl; } }; class AudioProcessor : public BaseProcessor<AudioProcessor> { public: // 特有实现方法 void specific_processing() { std::cout << "♫ 执行音频特殊处理:降噪+标准化" << std::endl; } // 派生类特有方法 void normalize_volume() { std::cout << "标准化音量至-16 LUFS" << std::endl; } }; //--------------------------- // 工厂函数模板 //--------------------------- template <typename T> std::unique_ptr<T> create_processor() { return std::make_unique<T>(); } //--------------------------- // 主程序逻辑 //--------------------------- int main() { try { // 读取配置文件 std::string config_type = read_config(); // 根据配置动态创建处理器 if (config_type == "IMAGE") { auto processor = create_processor<ImageProcessor>(); processor->process(); processor->generate_thumbnail(); // 调用特有方法 } else if (config_type == "AUDIO") { auto processor = create_processor<AudioProcessor>(); processor->process(); processor->normalize_volume(); // 调用特有方法 } else { throw std::invalid_argument("未知的处理器类型: " + config_type); } } catch (const std::exception& e) { std::cerr << "❌ 错误: " << e.what() << std::endl; return 1; } return 0; }将上边的代码修改成C++11
最新发布
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoni61

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值