交叉编译器异常处理 - 可以安全地完成吗?

Sim*_*one 1 c++ exception cross-compiling

我正在对C++ windows dll库进行一些维护,这是需要与不同的VC++编译器一起工作的(因为我不想解决不同的修改方案).

我已经在界面中消除了对STL的任何使用.

我已经确保混合不同的new/delete不会发生堆损坏.

最后一项是例外.我可以抛出异常并期望它被不同版本的编译器正确捕获吗?

sbi*_*sbi 8

即使考虑你的额外评论:只要MS改变编译器的ABI或异常类的类布局,甚至使用不同的编译器设置,这都会失败.实际上,即使使用相同的编译器,后者也可能导致失败.

所以我猜答案是:不,你不能安全地做到这一点.如果要在可执行文件之间传递非POD对象,则应使用相同的编译器,相同的std库以及相同(在某种程度上)编译器设置来编译它们.