混合C (结构)和C++异常

如果要编写更可移植代码,使用结构化异常处理在 c. C++ 程序不建议使用。 但是,有时可能希望编译 /EHa 和组合结构化异常和 C++ 源代码,并且需要过程的两某个设备异常。 由于结构化异常处理程序没有对象或类型化异常概念,但无法 C++ 代码引发的异常;但是, C++ catch 处理程序可以处理结构化异常访问。 因此, C++ 异常处理语法 (尝试、 throw, catch) 未由 C 编译器,但是,结构化异常处理语法 (__try、 __except, __finally) 接受由 C++ 编译器支持。

请参见 _set_se_translator 有关处理结构化异常的信息作为 C++ 异常。

如果混结构化和 C++ 异常,请注意以下事项:

  1. C++ 异常和结构化异常不能是混合在同一函数中。

  2. 终止处理程序 (__finally 块) 总是执行,即使在展开过程中,在引发异常后。

  3. C++ 异常处理可以捕获,并保留展开在所有模块的语义编译 /EH 编译器选项 (此选项将启用展开语义)。

  4. 可以具有析构函数没有为任何对象调用的一些情况。 例如,因此,如果结构化异常,当尝试通过非初始化的函数指针进行函数调用,因此,该函数接受的构造,在调用之前的参数对象,这些对象不会与堆栈上调用期间自己的析构函数展开。

您想进一步了解什么?

请参见

参考

C++异常处理