在C++环境下,什么是“实现”? 我正在阅读加速C++,在标准页眉上有行。

在C++环境下,什么是“实现”? 我正在阅读加速C++,在标准页眉上有行。,c++,standard-library,C++,Standard Library,值得注意的是,尽管我们将自己的头文件称为头文件,但我们将 实现提供的头文件是标准头文件,而不是标准头文件。这个 原因是头文件是每个C++实现中的真正文件,但系统头 不需要实现为文件 我的第一个问题是,如果我们运行Windows操作系统,一方面我们拥有GNU编译器,其次我们有Turbo C++。那么,我们认为它们是分开实施的吗?< /P> 我的第二个问题是,这些标准头实际上是如何实现的;这里的一个实现是一个称为C的理论抽象机器的实现++ 您混淆了IDE/编辑器和编译器 GCC 5.1总体上是一个编

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

我的第一个问题是,如果我们运行Windows操作系统,一方面我们拥有GNU编译器,其次我们有Turbo C++。那么,我们认为它们是分开实施的吗?< /P> 我的第二个问题是,这些标准头实际上是如何实现的;这里的一个实现是一个称为C的理论抽象机器的实现++

您混淆了IDE/编辑器和编译器

GCC 5.1总体上是一个编译器/链接器/工具链/标准库实现

AS是Visual C++ 2015,尽管这个术语也扩展到IDE本身;谢谢,微软

是你的Turbo C++产品,它比C++还大,比你大。


代码块是调用工具链的IDE。它可能与您使用的旧Turbo C++安装相同,但我对此非常怀疑,因为您的Turbo C++需要DOS仿真器来运行RoFL。

< P>作者认为,编译器应该在编译器内部实现,如果它希望这样做的话,在编译代码的系统中没有任何名为string的文件。实际上,我并不知道有任何编译器实现这个,但是从C++标准的角度来看,它确实是可行的。

每个编译器供应商,例如GCC和GCC的自由软件基金会,在CLAN后面的伊利诺斯大学的人,微软、Borland、IBM、英特尔等的人,产生编译器将产生编译器的实现。如果我编写自己的C++编译器,那就是一个实现。我碰巧有自己的编译器,用PASCAL语言编写的C++语言,使用LLVM作为后端——这是语言Pascal的一个实现——和所有的实现一样,它遵循标准,但是有一些实现定义的特征。所有的实现都会有一些基于实现者选择做什么的事情,原因有几个:

该标准并不具体:int或Pascal的整数的大小没有指定超过它必须至少是这么大…,所以只要满足最低标准,实现者就可以做他/她/他们选择的事情。 扩展-超出标准的东西。通常,标准有一些限制或功能缺失,实现者可能会决定改进这些限制或功能缺失,这确实会使实现成为非标准的,但是如果扩展没有改变符合标准的代码的行为,那么添加这些限制或功能是安全的[例如,Pascal没有文件名,因此Pascal程序无法使用特定名称创建文件-大多数实现都有一些方法使用特定名称作为扩展名创建文件] 标准规定了实现定义的行为——与非特定行为类似,标准可以说这取决于实现者按照自己的意愿去做。
代码:块不是一个C++的实现。请提及投票失败的原因。@路由器:这是许多原因之一:没有研究工作。是的,GCC和Turbo C++是两种不同的实现方式。它们的标准库实现是用代码实现的。例如,GCC使用和.NIF FrEDLMN感谢您的支持。我不是比Turbo更老。Visual C++不是编译器/链接器/工具链/标准库实现,而Visual Studio是多个编程语言的IDE?@ ChristianHackl:是的,我想这更接近了,尽管Visual C++本身仍然被称为IDE。不幸的是,由于MS不进行DIST,所以很难精确。IDE和编译器之间的UI。你是对的,Visual Studio是一套IDE和实现,但是。TBH IDE的全部要点是它是集成的。一个只附带为编辑代码而定制的编辑器的编译器不是真正的IDE。也就是说,VC++与Windows SDK的集成是多么糟糕令人尴尬。是的,我知道吗,微软操作系统和tools@MSalters:不过,集成不需要紧密耦合。也就是说,使用中的集成和实现中的集成是两件不同的事情。看看Eclipse,代码块,所有这些:你可以使用你想要的任何编译器。当然,在某种程度上你也可以在VS中对其进行破解,但是facVC++编译器实际上与GUI告诉您的一切都在同一个包中。哇,是的,作者的书呆子太多了。因此可以安全地假设每个编译器都是不同的实现?@Rouftantical:根据定义t
这是真的。每个编译器都是C++的一个不同实现的一部分。是的,即使我使用CLAN的源代码,并用一个小的改变重新编译它,并发布一个更改(在CURAN的相同许可下),但这是一个不同的实现——从技术上讲,版本5.0和5.0.1也是不同的实现,但它们的总体行为很可能是相同的。