Can I throw a C++ exception from a structured exception?
5 months ago
- #Compiler Optimization
- #C++
- #Exception Handling
- 客户希望避免使用/EHa编译器开关,因其会导致性能和代码体积的损失。
- 建议通过未处理异常过滤器将结构化异常转换为C++异常。
- 初始示例有效是因为printf可能抛出异常,从而保持try-catch块处于活跃状态。
- 若移除printf,编译器会优化掉try-catch块,导致异常未被捕获。
- 使用/EHa可确保变量在异常发生时保持稳定,避免未定义行为。
- 在未启用/EHa时手动转换可能导致未定义行为(因变量未初始化)。
- 结论:若要从结构化异常抛出C++异常,必须使用/EHa以避免未定义行为。