Exception Specifications这个词我成为“异常规格”,不知道是否准确,有更准确的希望大家布林刺激哦。
异常规格被用于指出一个函数能抛出什么样的异常。
函数可以抛出任何类型异常
void MyFunction(int i) throw(...);
函数不能抛出异常
void MyFunction(int i) throw();其等效于
void __declspec(nothrow) MyFunction(int i) throw();
VisualC++与标准C++在异常规格实现,下面是VisualC++的异常规格说明
| 异常规格 | 涵义 |
| throw() |
函数不会抛出异常 |
| throw(...) |
函数可以抛出任何异常 |
| throw(type) |
函数抛出type类型异常 |
一个函数抛出异常的行为还取决于下面因素:
编译函数的方式是C还是C++/EH编译选项有关系(/EH:异常处理模式)指定的异常规格有关系下面是详细说明:
| Function |
/EHsc |
/EHs |
/EHa |
/EHac |
|---|---|---|---|---|
| C function |
throw() |
throw(...) |
throw(...) |
throw(...) |
| C++ function with no exception specification |
throw(...) |
throw(...) |
throw(...) |
throw(...) |
| C++ function with throw() exception specification |
throw() |
throw() |
throw(...) |
throw(...) |
| C++ function with throw(...) exception specification |
throw(...) |
throw(...) |
throw(...) |
throw(...) |
| C++ function with throw(type) exception specification |
throw(...) |
throw(...) |
throw(...) |
throw(...) |
P.S:以上内容参考MSDN2008所写。