在C++的背景下,什么是"实施"?

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

本文关键字:实施 什么 C++ 背景      更新时间:2023-10-16

我正在阅读加速c++,那里写了关于标准头的行

值得注意的是,尽管我们将自己的头文件称为头文件,但我们将实现提供的头文件作为标准头文件而不是标准头文件。的原因是头文件在每个c++实现中都是真正的文件,而不是系统头文件不需要实现为文件

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

我的第二个问题是,这些标准头实际上是如何实现的?

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

每个编译器供应商,如GNU和自由软件基金会的gcc,伊利诺伊大学的人背后的clang,人在微软,Borland, IBM,英特尔等生产一个编译器将产生一个编译器的"实现"。如果我写我自己的c++编译器,这将是一个实现。我碰巧有自己的Pascal语言编译器(用c++编写,并使用LLVM作为后端)——这是Pascal语言的实现——像所有实现一样,它遵循标准,但有一些"实现定义"的特性。由于几个可能的原因,所有的实现都会有一些"基于实现者选择做什么"的事情:

  1. 标准不具体:int或Pascal的integer的大小除了"必须至少这么大…"之外没有规定,所以只要满足最小标准,实施者就可以为所欲为。
  2. 扩展-超出标准的东西。通常标准的限制或缺失的功能,实现者可以决定"改善"(这确实使实现"非标准",但如果扩展不改变标准兼容的代码的行为,是"安全"的添加)(例如,帕斯卡没有"文件名称",所以Pascal程序不能创建一个文件通过一个特定的名称——大多数实现都有一些方法来创建一个文件通过一个特定的名称作为一个扩展)
  3. 标准规定了"实现定义的行为"——类似于非特定的,标准可以说"这取决于实现者做她/他/他们想做的"。

tl;这里是理论抽象机" c++ "的实现

你混淆了ide/编辑器和编译器。

GCC 5.1是一个编译器/链接器/工具链/标准库实现("实现")。

和Visual c++ 2015一样(尽管这个命名法也扩展到IDE本身;谢谢,微软!)。

就像你的Turbo c++产品比c++老,比你老一样。

CodeBlocks是一个IDE, 调用一个工具链。它可能会或可能不会与您使用的旧Turbo c++安装相同,尽管我非常怀疑它,因为您的Turbo c++需要一个DOS模拟器来运行(ROFL)。