异常一些基本知识
std::exception
为异常的基类。- 所有其他标准库抛出的异常都是该类的派生类,因此所有标准异常都能被
std::exception&
捕获。 - 通常使用
what()
函数得到错误信息,函数原型为:virtual const char* what() const throw();
- C++函数后面加关键字
throw(something)
限制,是对这个函数的异常安全作出限制;这是一种异常规范,只会出现在声明函数时,表示这个函数可能抛出某些类型的异常。例如:
void GetTag() throw(int); // 表示只抛出int类型异常
void GetTag() throw(int,char); // 表示抛出int,char类型异常
void GetTag() throw(); // 表示不会抛出任何类型异常
void GetTag() throw(...); // 表示抛出任何类型异常
- 除了
catch
某个异常,我们还经常会看到catch(...)
语句。catch(...)
表示捕获所有的异常,包含std::exception
和所有其他throw
的类型,例如throw 42
。C++里面,任何类型都可以被throw
,此时就需要catch(...)
来捕获所有的异常。