MFC异常与C++标准异常

MFC较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:

异常类                                                        含义
CMemoryException                                    内存不足
CFileException                                          文件异常
CArchiveException                                    存档/序列化异常
CNotSupportedException                          响应对不支持服务的请求
CResourceException                                Windows 资源分配异常
CDaoException                                         数据库异常(DAO 类)
CDBException                                           数据库异常(ODBC 类)
COleException                                          OLE 异常
COleDispatchException                            调度(自动化)异常
CUserException                                        用消息框警告用户然后引发一般 CException 的异常

 

标准库异常类
   C++标准库异常类定义在四个头文件中:
   1) <exception>头文件中定义了异常类exception;
   2) <stdexcept>头文件中定义了几种常见的异常类。
   3) <new>头文件中定义了bad-alloc异常类。当new无法分配内存时将抛出该异常类对象。
   4) <type_info>头文件中定义了bad_cast异常类。当dynamic_cast失败时将抛出该异常类对象。

   标准异常类之间的关系:exception派生出runtime_error类、logic_error类、bad_cast类和bad_alloc类。由runtime_error派生出range_error、overflow_error、underflow_error;由logic_error派生出domain_error、invalid_argument、length_error、out_of_range。

 

标准异常类的详细列表

 exception
 最常见的问题
 runtime_error
 运行时错误:仅在运行时才能检测到的问题
 range_error
 运行时错误:生成的结果超出了有意义的值域范围
 overflow_error
 运行时错误:计算上溢
 underflow_error
 运行时错误:计算下溢
 logic_error
 逻辑错误:可在运行前检测到的问题
 domain_error
 逻辑错误:域错误
 invalid_argument
 逻辑错误:无效参数
 length_error
 逻辑错误:试图生成一个超出该类型最大长度的对象
 out_of_range
 逻辑错误:使用一个超出有效范围的值


注:运行时错误是指在某语句计算过程中产生的错误,逻辑错误是指在某语句执行前检查到的错误。
 
   exception、bad_alloc、bad_cast类型只定义了默认构造函数,而其它类型则只定义了一个使用string作为参数的构造函数。基类exception提供了一个what()成员函数,其返回const char*类型的C风格字符串。对于以string初始化的异常类,what()将返回该string对应的C风格字符串;否则返回的值是未定义的。
标准异常都派生自一个公共的基类exception。下面是exception类的原型:
class exception
{
public:
    exception() throw();
    exception(const exception& rhs) throw();
    exception& operator=(const exception& rhs) throw();
    virtual ~exception() throw();
    virtual const char *what() const throw();
};
posted @   靓点博客  阅读(548)  评论(0编辑  收藏  举报
编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
点击右上角即可分享
微信分享提示