C++标准程序读书笔记-第三章错误和异常处理

1.命名空间(namespace)std

C++标准程序库中的所有标示符都被定义于一个名为std的namespace

2.标准异常类别

(1)语言本身或标准程序库所抛出的所有异常,都派生自基类exception

(2)

image

(3)标准异常类别分为三组

  • 语言本身支持的异常
  • C++标准程序库发出的异常(派生自logic_error)
  • 程序作用域之外发出的异常(派生自runtime_error)

(4)异常类别的头文件

基础类别exception和bad_exception定义于<exception>

bad_alloc定义于<new>

bad_cast和bad_typeid定义于<typeinfo>

ios_base::failure定义于<ios>

其他异常类别都定义于<stdexcept>

3.抛出标准异常

std::string s;
...
throw std::out_of_range(s);

或者

throw std::out_of_range("out_of_range(somewhere,somehow");

4.从标准异常中派生新类别

(1)派生自exception

这种情况必须确保what()机制正常运作。what()是个虚拟函数,所以提供what()的方法之一就是自己实现what()

class MyProblem : public std::exception {
public:
	virtual const char* what() const throw() { //what() function
		...
	}
};

(2)异常类派生自上图中的标准异常(不包含exception)

class MyRangeProblem : public std::out_of_range {
public:
	MyRangeProble(const string& whatString)
		: out_of_range(whatString) {
	}
};

posted on 2014-11-30 00:31  C Pointer  阅读(153)  评论(0编辑  收藏  举报

导航