Hasty Briefsbeta

双语

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以避免未定义行为。