c++ - STL与C++的关系
问题描述
因此,显然 STL 被称为标准模板库,其中包括常见的数据结构、类、函数或方法。但是,STL 不是内置在 C++ 语言中的,即使它拥有在 C++ 语言中使用这些常见事物的代码?我认为所有这些常见的数据结构和方法都内置在 C++ 语言本身中,但我们必须继续包含预处理器指令才能访问它们。此外,是否有一个适用于所有 STL 的预处理器指令?为什么有单独的预处理器指令共同构建 STL。STL不应该用一件事来表示吗?
解决方案
STL 是一个软件库的名称,最初由 Alexander Stepanov 开发,并于 1993 年提交 C++ 标准化委员会审议。
在最终导致第一个 C++ 标准于 1998 年获得批准的标准化过程中,库的规范不断发展。C++ 标准指定了 C++ 标准库。
由于这段历史,STL 影响了 C++ 标准库的规范。在 1998 年之前的标准化过程中,STL 得到了演进和扩展。1994 年,这项工作导致 Alexander Stepanov 和 Meng Lee 提出的 C++ 标准库提案被投票并纳入(当时的)C++ 标准草案。
从技术上讲,可以区分 C++ 语言(语法、语义等规则)和 C++ 标准库(它提供了一组基于并支持该语言的类型和函数)。许多 C++ 标准库可以用 C++ 语言实现(例如库的模板化部分,例如源自 STL 的标准算法)。一些元素(例如,由 templated 表示的整数类型范围的规范std::numeric_limits
)是实现定义的。有些部分根本无法用 C++ 实现(例如,在某种程度上,它们访问“编译器魔法”,或使用主机系统的设施(操作系统特定的 API、机器指令等)。
C++ 标准库没有单一的预处理器指令,STL 也从来没有。哲学是代码只访问它需要的功能(例如,如果做基于控制台的 I/O,它包括<iostream>
但不需要包括<numeric>
(提供常用的数学函数))。实际上,对于大多数实现,包括程序不需要的标准库部分,往往会增加预处理和后续翻译阶段(解析头文件的内容)所需的时间和资源,因此会增加构建时间大量。由于重大项目的从头开始构建时间可能以几周或几个月为单位,并且使用“包含所有标题”可以轻松地将构建时间增加几个数量级,因此通常认为避免它们是一种好的做法。
推荐阅读
- android - android gridLayoutManager - 当recyclerview被限制在屏幕的左右两侧时如何使间距相等
- javascript - ReactJS:如何在默认情况下在材料表中进行选择?
- google-analytics - 将 ga3 迁移到 ga4:多域引用排除
- yii2 - 保存后如何获取模型主键值
- installation - 如何手动安装 dask[complete]?
- alexa - 用于游戏的 Alexa Web API - 技能清单
- angular - 使用 getDataAsExcel 将 Ag-Grid 表导出到 Excel 时无法将字符串列/数据解析为数值
- javascript - 将 javascript 字典读入 Python
- c# - 被认为是“some.dll”,但它不存在
- ios - Fastlane 没有这样的文件或目录存在的文件