因此,C++20 承诺了新的模块功能,据说这将消除#include
由预处理器驱动的当前系统的所有问题。
问题是:旧标题会发生什么?
这个问题可以分为2个:
1. 标准库头文件会发生什么<iostream>
?
我很确定这是一个很容易回答的问题,C++ 标准一定已经解决了这个问题,但我问是因为我不知道该怎么做。您将如何替换该行:
#include <iostream>
有一个import
声明?
2. 使用头文件的其他库(如<windows.h>
)<unistd.h>
和所有其他第三方 C/C++ 库会发生什么情况?
这个问题似乎更难回答。在我们良好的旧系统中,库生成器会将库编译为目标文件或静态/动态库,并将其与包含接口的/文件#include
一起发布(作为用户,您将只有实现的源代码)如果它是一个开源库,则为该库)。.h
.hpp
现在,这个新的模块系统只需要库制作者编译库并发布它。这背后的基本原理(据我所知)是链接器将知道库导出的内容(全部存储在目标文件中)并能够进行相应的链接。
当您必须使用具有目标文件和头文件的旧库时,就会出现问题。可以安全地假设大多数相关的库开发人员会将他们的代码转换为新的模块系统,但旧的(已停产的)库不会那么幸运。目标文件里面不会有模块名(因为它没有作为模块编译),所以使用库的代码不会有模块名来使用。在这种情况下图书馆用户应该怎么做?