在C++的背景下,什么是"实施"?
In the context of C++, what is an "implementation"?
我正在阅读加速c++,那里写了关于标准头的行
值得注意的是,尽管我们将自己的头文件称为头文件,但我们将实现提供的头文件作为标准头文件而不是标准头文件。的原因是头文件在每个c++实现中都是真正的文件,而不是系统头文件不需要实现为文件
我的第一个问题是,如果我们运行windows操作系统,一方面我们有代码块 (GNU编译器),另一方面我们有turbo c++。那么我们是否将它们视为单独的实现?
我的第二个问题是,这些标准头实际上是如何实现的?
作者的观点是,如果编译器希望这样做,它可以在编译器内部实现#include <string>
,而不需要在编译代码的系统中存在任何称为string
的文件。在现实中,我不知道有任何编译器实现了这一点,但从c++标准的角度来看,这肯定是可行的。
每个编译器供应商,如GNU和自由软件基金会的gcc,伊利诺伊大学的人背后的clang,人在微软,Borland, IBM,英特尔等生产一个编译器将产生一个编译器的"实现"。如果我写我自己的c++编译器,这将是一个实现。我碰巧有自己的Pascal语言编译器(用c++编写,并使用LLVM作为后端)——这是Pascal语言的实现——像所有实现一样,它遵循标准,但有一些"实现定义"的特性。由于几个可能的原因,所有的实现都会有一些"基于实现者选择做什么"的事情:
- 标准不具体:
int
或Pascal的integer
的大小除了"必须至少这么大…"之外没有规定,所以只要满足最小标准,实施者就可以为所欲为。 - 扩展-超出标准的东西。通常标准的限制或缺失的功能,实现者可以决定"改善"(这确实使实现"非标准",但如果扩展不改变标准兼容的代码的行为,是"安全"的添加)(例如,帕斯卡没有"文件名称",所以Pascal程序不能创建一个文件通过一个特定的名称——大多数实现都有一些方法来创建一个文件通过一个特定的名称作为一个扩展)
- 标准规定了"实现定义的行为"——类似于非特定的,标准可以说"这取决于实现者做她/他/他们想做的"。
tl;这里是理论抽象机" c++ "的实现
你混淆了ide/编辑器和编译器。
GCC 5.1是一个编译器/链接器/工具链/标准库实现("实现")。
和Visual c++ 2015一样(尽管这个命名法也扩展到IDE本身;谢谢,微软!)。
就像你的Turbo c++产品比c++老,比你老一样。
CodeBlocks是一个IDE, 调用一个工具链。它可能会或可能不会与您使用的旧Turbo c++安装相同,尽管我非常怀疑它,因为您的Turbo c++需要一个DOS模拟器来运行(ROFL)。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 是什么阻止了 std::to_chars 和 std::from_chars 的实施
- 使用C++实施"睡眠"技术的正确方法是什么?
- 按特定值升序对字符串进行排序.我的实施中出了什么问题?
- 在C++中,用于原子更新的 CAS 最有效的实施是什么?
- 在 Vulkan 中实施"Instanced rendering"的正确方法是什么?
- 关于实施其中之一的CPP,这三个规则究竟是什么?
- 提升::none_t实施的基本原理是什么
- 在交易客户中,什么是正确的策略实施方式?
- 在C++的背景下,什么是"实施"?