我看到Doug Harrison已经很好地陈述了使用(即捕获)结构化异常的“错误”(参见question #3)。但还有其他后果吗?例如,如果我用/ eha编译了几个项目,并与用/ ehs编译的其他项目混合,会发生什么?当库与彼此链接(编译时或运行时)时是否存在问题?
但这只是一个例子。还有什么其他问题?
答案 0 :(得分:2)
/ EHa禁用优化。如果/ EH生效,编译器可以省略异常过滤器,如果它可以确保try {}中包含的代码不会抛出任何C ++异常。这是x86和x64上的小空间优化,x86上的非常小的时间优化。问题是,如果捕获非C ++异常,则需要这些过滤器。结果是,当没有被调用的C ++对象的析构函数时,如果抓住了这样的异常,堆栈就会被解除。不好,/ EHa避免它。
混合不会导致链接器问题。它导致了上述问题。
是的,/ EHa也让catch(...)做了一件非常愚蠢的事情,它真的抓住了一切。不久之前,这艘沉船遇难,Pokemon C ++异常处理也是一个坏主意。