C ++标准头文件

时间:2014-09-22 05:01:36

标签: c++

Accelerated C++: Practical Programming by Example书上写着以下内容..

  

...系统头文件无需实现为文件。即使#include   指令用于访问我们自己的头文件和系统头文件   并不要求它们以相同的方式实施

这究竟是什么意思?如果不是文件,系统头文件怎么可以实现?

3 个答案:

答案 0 :(得分:6)

想象一下,您编写自己的编译器和C ++标准库。您可以使#include <vector>不打开任何文件,而只是将一些状态加载到编译器中,使其理解std::vector。然后,您可以使用C ++以外的某种语言实现vector类,只要您的编译器足够理解它就能使其工作&#34;就好像&#34;你写了一个名为vector的实际C ++源文件。

答案 1 :(得分:5)

编译器在看到时可以硬编码:

#include <iostream>

然后它提供指定为由该指令声明的事物的所有定义等。

或者它可以将定义存储在数据库,某些其他编码文件或云中,或其他任何内容中。关键是标准不以任何方式限制编译器,只要达到最终目标即可声明指定的事物。

答案 2 :(得分:3)

标题包含在“源文件流”中的方式主要由实现决定。

C ++ 11(但很长一段时间都是这种情况,无论是在C ++和C中)16.2 Source file inclusion都说明了:

  

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

     

# include < h-char-sequence> new-line形式的预处理指令搜索一系列实现定义的位置,以查找由<>分隔符之间的指定序列唯一标识的标头,并导致替换该指令的标题的全部内容。如何指定场所或标识的标题是实现定义的。

(然后对"的{​​{1}}和裸变体进行进一步描述。

因此标题可能位于文件中。

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

或者从位于Betelgeuse轨道上的一个行星上的服务器读取(但是,没有FTL传输,这样的编译器在市场上不会持续很久)。

可能性多种多样,大多数都与疯狂接壤,但实际上并没有被标准本身所禁止。