在 C++ 的上下文中,什么是 "implementation"?

In the context of C++, what is an "implementation"?

我正在阅读 Accelerated C++,那里写了一些关于标准的行 header

It is worth noting that although we refer to our own headers as header files, we refer to the implementation-supplied headers as standard headers rather than standard header files. The reason is that header files are genuine files in every C++ implementation, but system headers need not be implemented as files.

我的第一个问题是,如果我们是 运行 windows OS 一方面我们有 codeblocks (GNU 编译器),另一方面我们有 turbo c++。那么我们是否将它们视为单独的实现?

我的第二个问题是这些标准 header 是如何实施的?

tl;dr an "implementation" 这是理论抽象机的实现,称为 "C++"

你在混淆 IDEs/editors 和编译器。

GCC 5.1 是一个 compiler/linker/toolchain/standard 库实现(总体 "implementation")。

与 Visual C++ 2015 一样(尽管此命名法也扩展到 IDE 本身;谢谢,Microsoft!)。

你的 Turbo C++ 产品比 C++ 还旧,比你还旧。

CodeBlocks 是一个 IDE 调用 工具链。它可能与您在古老的 Turbo C++ 安装中使用的相同,也可能不同,尽管我非常怀疑,因为您的 Turbo C++ 需要 DOS 模拟器才能 运行 (ROFL).

作者的意思是,如果编译器希望这样做,它可以在编译器内部实现 #include <string>,而系统中不会有任何名为 string 的文件编译你的代码。实际上,我不知道有任何编译器确实实现了这一点,但从 C++ 标准的角度来看,它肯定是可行的。

每个编译器供应商,例如 gcc 的 GNU 和自由软件基金会,clang 背后的伊利诺斯大学的人,Microsoft、Borland、IBM、Intel 等生产编译器的人将生产 "an implementation"一个编译器。如果我编写自己的 C++ 编译器,那将是一个实现。我碰巧有自己的 Pascal 语言编译器(用 C++ 编写并使用 LLVM 作为后端)——它是 Pascal 语言的一个实现——和所有实现一样,它遵循标准,但有一些 "implementation defined"特征。由于以下几个可能的原因,所有实现都会有一些 "based on what the implementor choose to do" 的东西:

  1. 标准不具体:int 或 Pascal 的 integer 的大小未指定超出 "it must be at least this big ...",因此只要满足最低标准,实施者就可以做什么he/she/they选择。
  2. 扩展 - 超出标准的东西。通常标准有限制或缺少实现者可能决定 "improve" 的功能(这确实使实现 "non-standard",但如果扩展不改变标准兼容代码的行为,它是 "safe" 添加)[例如,Pascal 没有 "names on files",因此 Pascal 程序无法通过特定名称创建文件 - 大多数实现确实有一些方法可以通过特定名称创建文件作为扩展名]
  3. 标准规定"implementation defined behaviour"——类似于非特定,标准可以说是"this is up to the implementor to do as she/he/they wish".