c++标准程序库异常派生自logic_error
1.invalid_argument 无效的参数
2.length_error 超越了最大长度
3.out_of_range 参数不再指定范围内
4.domain_error
标准程序库的I/O异常 ios_base::failure
派生自rutime_error异常
1.range_error 内部计算发生区间错误
2.overflow_error 算术运算发生上溢位
3.underflow_error 算术运算发生下溢位
异常类别的头文件
基类 exception 和 bad_exception定义于<exception>
bad_alloc定义于<new>
bad_cast 和 bad_typeid 定义于<typeinfo>
ios_base::failure定义于<ios>
其他异常都定义于<stdexcept>
打印异常
try{
}
catch(const std::exception& err){
std:cerr << err.what() << std::endl;
}
抛出标准异常
std::string s;
throw std::out_of_range(s);
自己定义异常
namespace std{
calss MyProblem : public std::exception{
public:
MyProblem() {...}
virtual const char* what() const throw() {...}
};
}
void f(){
throw MyProblem(...);
}
实现标准库异常
namespace std{
class MyRangeProblem : public std::out_of_range{
public:
MyRangeProblem(const std:string& whatstring)
:out_of_range(whatstring) {}
};
}