首页 > 解决方案 > STL与C++的关系

问题描述

因此,显然 STL 被称为标准模板库,其中包括常见的数据结构、类、函数或方法。但是,STL 不是内置在 C++ 语言中的,即使它拥有在 C++ 语言中使用这些常见事物的代码?我认为所有这些常见的数据结构和方法都内置在 C++ 语言本身中,但我们必须继续包含预处理器指令才能访问它们。此外,是否有一个适用于所有 STL 的预处理器指令?为什么有单独的预处理器指令共同构建 STL。STL不应该用一件事来表示吗?

标签: c++

解决方案


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>(提供常用的数学函数))。实际上,对于大多数实现,包括程序不需要的标准库部分,往往会增加预处理和后续翻译阶段(解析头文件的内容)所需的时间和资源,因此会增加构建时间大量。由于重大项目的从头开始构建时间可能以几周或几个月为单位,并且使用“包含所有标题”可以轻松地将构建时间增加几个数量级,因此通常认为避免它们是一种好的做法。


推荐阅读