我看到Doug Harrison已经对使用(即捕获)结构化异常的“错误”做出了很好的陈述(请参见问题#3)。但是还有哪些其他后果?例如,如果我有几个使用/eha编译的项目,与其他使用/ehs编译的项目混合在一起会发生什么?当库链接(编译时或运行时)彼此链接时是否存在问题?但这只是一个例子。还可能会有哪些其他问题?
/EHa关闭了一种优化。启用/EHs后,如果编译器可以确定try {}中的代码不会抛出C++异常,则可以省略异常过滤器。这是在x86和x64上进行的小型空间优化,但在x86上进行的时间优化非常小。问题是,如果捕获非C++异常,则需要这些过滤器。结果是,在捕获这样的异常时,堆栈被解除而没有调用C++对象的析构函数。这不好,/EHa避免了这种情况。混合不会导致链接器问题。它引起了上述问题。是的,/EHa还使catch(...)做了一件非常愚蠢的事情,它确实捕获了所有内容。不过,这个问题已经存在一段时间了,Pokemon C++异常处理也是一个坏主意。