M. *_*ley 10 c++ module definition
模块中的术语在下面的句子中引用了什么?
不允许异常跨模块边界传播.
这是Herb Sutter和Andrei Alexandrescu 在C++编码标准中的第62条规则.
我现在已经阅读了这本书,所以我想引用一节摘要,我认为这些摘要有些清晰:
不要向邻居的花园扔石头:C++异常处理没有普遍存在的二进制标准.除非您控制用于构建双方的编译器和编译器选项,否则不允许异常在两段代码之间传播; 否则,模块可能不支持异常传播的兼容实现.通常,这归结为:不要让异常跨模块/子系统边界传播.
这是个好问题.C++标准不使用单词模块(至少我不这么认为),而通常的日常含义就像翻译单元.除了那不能是Herb和Andrei的意思,因为使用异常的真正目的是从本地代码体中传播 - 否则,你将使用返回代码.
我只能猜测,但它们可能意味着可以合理地在不同的DLL中实现的东西.如果DLL已使用不同的编译器编译或使用其他语言,则传播DLL边界的异常可能是一个问题.除此以外...
通常认为最好的做法是在main中(或在每个线程中的某个其他高级函数中)使用单个try/catch块,并捕获所有异常,无论它们来自何处.当你这样做时,现代编译器没有问题.