C++ C++;标准头文件

C++ C++;标准头文件,c++,C++,书上说 。。。系统头文件不需要实现为文件。即使#包括 指令用于访问我们自己的头文件和系统头文件 是否不要求以同样的方式实施 这到底意味着什么?如果不是作为文件,那么如何实现系统头文件 编译器可能已硬编码,当它看到: #include <iostream> #包括 然后,它提供了所有定义的东西,被指定为正在声明的这个指令,等等 或者,它可以将定义存储在数据库、其他编码文件、云或其他任何地方。要点是,只要最终目标达到指定的对象就可以声明,编译器不以任何方式限制编译器。 < P>想象你

书上说

。。。系统头文件不需要实现为文件。即使#包括 指令用于访问我们自己的头文件和系统头文件 是否不要求以同样的方式实施


这到底意味着什么?如果不是作为文件,那么如何实现系统头文件

编译器可能已硬编码,当它看到:

#include <iostream>
#包括
然后,它提供了所有定义的东西,被指定为正在声明的这个指令,等等


或者,它可以将定义存储在数据库、其他编码文件、云或其他任何地方。要点是,只要最终目标达到指定的对象就可以声明,编译器不以任何方式限制编译器。

< P>想象你自己编写编译器和C++标准库。您可以使
#include
不打开任何文件,而只是将一些状态加载到编译器中,使其能够理解
std::vector
。然后,你可以用C++以外的语言实现你的向量类,只要编译器足够理解它,就好像“你已经编写了一个实际的C++源文件,叫做<代码>矢量< /C> > .< /P> < P>,头文件被包含到你的“源文件流”中的方式主要是实现。

C++ 11(但这是长时间以来的情况,C++和C中都有)<代码> 16.2源文件包含< /C> >状态:

#include
指令应标识可由实现处理的头文件或源文件

格式为
#include新行
的预处理指令搜索实现定义的位置序列,以查找由
分隔符之间的指定序列唯一标识的头,并导致用头的全部内容替换该指令。如何指定位置或标识标头是实现定义的

(然后进一步说明
的裸变体包括

因此,标头可能位于文件中

它也可以由编译器从硬编码值注入

或者从运行参宿四的行星上的服务器上读取数据(尽管没有FTL传输,这样的编译器在市场上不会持续很久)


可能性是多种多样的,大多数都近乎疯狂,但没有一种是标准本身所禁止的。

在实践中,这些确实是文件。原则上,编译器可以使用其他东西,例如访问某些数据库。今天的大多数编译器(例如…)正在访问文件的头。一些专有的C++编译器的上个世纪使用了一个数据库。