C++幕后的模块
C++ modules behind the scenes
阅读"C++之旅" 我到达了"模块",应该使用它们而不是包含标题。
-
一个模块只编译一次(而不是在每个使用它的翻译单元中编译)
-
如果 #include header.h 101 次,则编译器将处理 header.h 的文本 101 次
也许我误解了,但让我们通过一个简单的例子
src1.cpp includes header.h
src2.cpp includes header.h
header.h 的文本被编译器复制到每个 src 文件中?然后每个源生成一个对象文件,然后将其链接到.exe
它如何与模块一起工作?它是否动态链接到程序,因此只有一个副本存在并处理?
差异很大,因为使用当前方法,一切都是通过复制和粘贴方法完成的。
包含被逐字复制到其他文件中,然后完全处理。每个翻译单元根据需要多次处理相同的代码。
模块将要发生的事情是,您将有一个特定的导入指令,该指令将映射到一个已经公开精确 API 并具有链接到最终可执行文件的特定二进制文件的模块。
您不需要公开该 API 的头文件,因为将分析源代码并自动生成一个"接口文件",该文件枚举该模块的导入者可用的所有导出符号。
请注意,这只是一些通用方法,因为精确的定义尚未标准化。
相关文章:
- 尝试导入pybind-opencv模块时出现libgtk错误
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 内联如何影响模块接口中的成员函数
- C++返回 Numpy 数组的 Python 扩展模块
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 如何从线程中的不同模块调用函数?
- 如何使用 soong 命名空间来有条件地编译模块
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- CMake - 模块 + 库混淆
- 特征 LLT 模块给出不正确的结果?
- 枚举进程模块在有效句柄上返回无效句柄
- 在 python 模块中导入子模块时PyImport_Import失败
- 将 PCL 链接到 Cython C++ 模块
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 电源功能模块化操作
- 如何告诉本机节点模块所需的dll存储在哪里?
- 如何为模块化应用程序实现C++插件系统
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- Arduino 模块化编程与全局和设置