不应在模块之间传播异常
7.27 ID_crossModuleException
异常的传播机制依赖编译器的具体实现,在不同编译器产生的模块间传播异常会造成运行时错误。
除非模块均由同一编译器的同一版本生成,否则模块供外部使用的接口不应抛出异常。
示例:
// a.dll
void foo() {
throw Exception(); // Non-compliant
}
// b.exe
int main() try {
foo();
} catch (Exception&) { // May not catch
....
}
设例中 a.dll 和 b.exe 由不同的编译器生成,异常的抛出机制和捕获机制可能并不匹配,进而导致冲突。