C++异常第二篇---C++标准库异常类exception的使用
来源:互联网 发布:怎么执行php图片木马 编辑:程序博客网 时间:2024/05/21 17:48
1 继承图示
2 具体讲解
C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下:
namespace std {
class exception {
public:
exception() throw(); //不抛出任何异常
exception(const exception& e) throw();
exception& operator= (const exception& e) throw();
virtual ~exception() throw)();
virtual const char* what() const throw(); //返回异常的描述信息
};
}
除了exception类,C++还提供了一些类,用于报告程序不正常的情况,在这些预定义的类中反映的错误模型中,主要包含逻辑错误和运行时错误两大类。
逻辑错误主要包括invalid_argument, out_of_range, length_error, domain_error。当函数接收到无效的实参,会抛出invaild_argument异常,如果函数接收到超出期望范围的实参,会抛出out_of_range异常,等等。
namespace std {
class logic_error: public exception {
public:
explicit logic_error(const string &what_arg);
};
class invalid_argument: public logic_error {
public:
explicit invalid_argument(const string &what_arg);
};
class out_of_range: public logic_error {
public:
explicit out_of_range(const string &what_arg);
};
class length_error: public logic_error {
public:
explicit length_error(const string &what_arg);
};
class domain_error: public logic_error {
public:
explicit domain_error(const string &what_arg);
};
}
运行时错误由程序域之外的事件引发,只有在运行时才能检测,主要包括range_error, overflow_error, underflow_error。函数可以通过抛出range_eroor报告算术运算中的范围错误,通过抛出overflow_error报告溢出错误。
namespace std {
class runtime_error: public exception {
public:
explicit runtime_error(const string &what_arg);
};
class range_error: public runtime_error {
public:
explicit range_error(const string &what_arg);
};
class overflow_error: public runtime_error {
public:
explicit overflow_error(const string &what_arg);
};
class underflow_error: public runtime_error {
public:
explicit underflow_error(const string &what_arg);
};
}
另外,在new头文件中定义了bad_alloc异常,exception也是bad_alloc的基类,用于报告new操作符不能正确分配内存的情形。当dynamic_cast失败时,程序会抛出bad_cast异常类,其也继承自exception类。
转载自:http://blog.csdn.net/zhq651/article/details/8425579
3 例子
#include<stdexcept>
try
{
throw invalid_argument("hah");
//throw out_of_range(" we get the outofrange error");
}catch(invalid_argument& in)
{
cout<<"we catch invalid_argument"<<in.what()<<endl;
}catch(...)
{
cout<<"we catch unexpected error,exit"<<endl;
return 1;
}
- C++异常第二篇---C++标准库异常类exception的使用
- C++异常第二篇---C++标准库异常类exception的使用
- C++异常第二篇---C++标准库异常类exception的使用
- Exception异常类(C#)
- [C++]详解异常处理(Exception Handling) 及标准库异常处理类
- Exception-异常处理(c++)的总结
- Objective-C - 异常处理(Exception)
- Objective-C - 异常处理(Exception)
- Objective-C - 异常处理(Exception)
- More Effective C++----(14)审慎使用异常规格(exception specifications)
- 【C#】61. 并行查询的异常处理 PLINQ Exception
- 标准库的异常类
- C++------------------------>异常处理(Exception handling)
- 异常处理 Exception(C++Primer-11)
- C++、Java、JavaScript中的异常处理(Exception)
- 尽量使用标准的异常
- C#datagridview_selectionchanged的异常
- (C++)使用自定义的异常类获取源代码信息
- CSS格式化上下文(BFC)
- Java基础之多线程与并发篇
- Android手机应用畅销的十个秘诀
- 欲善其事,必利其器---页面开发基础知识整理
- 菜鸟到大神的上位历程,即学即用走向人生巅峰
- C++异常第二篇---C++标准库异常类exception的使用
- iOS沙盒机制浅析
- ngui学习之scrollview
- git常用命令之git pull使用说明
- Android APK加壳技术方案
- 欢迎使用CSDN-markdown编辑器
- x264代码剖析(十六):核心算法之宏块编码中的量化编码
- 数据库的读取
- (JNI)c代码利用反射调用java方法