模块这个术语在下面的句子中引用了什么?
不允许异常跨模块边界传播。
这是Herb Sutter和Andrei Alexandrescu在C++ Coding Standards中的第62条规则。
我现在已经阅读了这本书,所以我想引用部分摘要,我认为这有点清晰:
不要向邻居的花园扔石头:C ++异常处理没有普遍存在的二进制标准。除非您控制用于构建双方的编译器和编译器选项,否则不允许异常在两段代码之间传播;否则,模块可能不支持异常传播的兼容实现。通常,这归结为:不要让异常跨模块/子系统边界传播。
答案 0 :(得分:5)
这是一个很好的问题。 C ++标准不使用这个词 模块(我不认为,至少),以及通常的日常意义 就像一个翻译单位。除了那不可能 Herb和Andrei的意思,因为使用的真正目的 例外是从本地机构传播出去 代码 - 否则,您将使用返回代码。
我只能猜测,但它们可能意味着可能的东西 合理地在不同的DLL中实现。传播 如果是,则跨越DLL边界的异常可能会成为问题 DLL已经使用不同的编译器编译或使用 一种不同的语言。否则...
通常认为有一次尝试/捕获的最佳做法 在主要(或在其他一些高级功能中)阻止 线程),并捕获所有异常,无论在哪里 他们来自。当你这样做时,现代编译器没有问题。
答案 1 :(得分:0)
我还没看过那本书,但听起来很可能是这个pdf from the University of Michigan中详细介绍的模块概念。
IE中。模块是单个编译单元,通常由头文件和源文件组成。
由于强调了对编辑的控制,因此在本书引用的上下文中这是有道理的。如果您在单个编译单元(模块)中具有自包含功能,那么您永远不必担心由于依赖于特定编译器功能而导致编译功能变得不完整。