标准库在哪里?

Sil*_*nic 1 c++ codeblocks

我搜索过谷歌,但没有找到我的查询的直接答案.

我一直在阅读C++ Primer,我对这门语言还很陌生,但尽管这本书有多好,但它讨论了标准库的使用,但并没有真正描述它的位置或来自何处(它没有'无论如何).那么,标准库在哪里?哪些头文件可以让我访问它?当我下载CodeBlocks时,STL是否附带了它?或者它是自动附带我的操作系统?

有点相关,但Cobeblocks带来的MinGW究竟是什么?在这里

MinGW是一个C/C++编译器套件,它允许您创建Windows可执行文件而不依赖于此类DLL

所以在最基本的层面上它只是让我制作C++程序所需的"东西"的集合?

对这个非常基本的问题道歉.

Die*_*ühl 7

当您安装了C++ 实现后,您将拥有一些可以实现使用 C++ 源文件并将其转换为运行所需的一切的东西。具体如何完成取决于具体的 C++ 实现。最常见的是,有一个编译器处理单个源文件并将它们转换为目标文件,然后由链接器组合以生成实际运行的程序。这绝不是必需的,例如,cling直接解释 C++ 代码而不进行编译。

所有这些只是为了澄清,尽管大多数当代 C++ 实现都遵循编译器/链接器的方法,并以带有声明的文件集合和提供这些声明的实现的库文件的形式提供库,但 C++ 的实现方式并不只有一种。

C++ 标准库的位置以及其声明的位置完全取决于 C++ 的实现。奇怪的是,到目前为止,除了 cling 之外,我遇到的所有 C++ 实现都使用编译器,并且所有这些编译器都支持一个预处理 C++ 文件的-E选项(尽管它是为 MSVC++ 拼写的)。/E通常相当大的输出显示指向声明位置的包含文件的位置。也就是说,在命令行上执行类似的操作会生成一个包含有关位置信息的文件:

compiler -E input.cpp > input.ii
Run Code Online (Sandbox Code Playgroud)

编译器compiler的实际命名方式完全取决于 C++ 实现,类似于g++clang++等。该文件input.cpp应该包含适用于标准 C++ 库标头之一的合适的 include 指令,例如

#include <iostream>
Run Code Online (Sandbox Code Playgroud)

在输出中搜索input.ii应该会显示该标头的位置。当然,编译器可以在不实际包含文件的情况下使声明可用,而只是使声明可见。曾经有一个像这样的编译器(TenDRA),但我不知道有任何当代编译器这样做(不过,考虑标准化的模块将来可能会回来)。

具有实现各种声明的对象的实际库文件所在的位置是一个完全不同的问题,并且定位这些文件往往会更加复杂。

C++ 实现可能是在安装 CodeBlocks 时以某种方式安装的。我认为这只是一个包。在具有包管理系统(如某些 Linux 上的 dpkg)的系统上,让 IDE 依赖于编译器(例如,用于 CodeBlocks 的 gcc)并让编译器依赖于标准 C++ 库(用于 libstdc++)是相当合理的。 gcc)并让包管理系统理清安装方式。


πάν*_*ῥεῖ 5

"当我下载CodeBlocks时,STL是否附带了它?"

尽管它不是称为STL,而是C++标准库,但它带有您的c ++编译器实现(并且可选地与CodeBlocks IDE一起打包).

您必须区分IDE和编译器工具链.码块(在 ntegrated d才有发展ë nvironment)可以被配置成使用多个不同的编译器工具链(例如锵或MSVC)的.

"或者它会自动附带我的操作系统吗?"

不,通常不是.尤其不适用于Windows操作系统

"那么,标准库在哪里?哪些头文件可以让我访问它?"

它们带有您当前用于CodeBlocks项目的编译器工具链.
假设这是MinGW GCC工具链并且它安装在默认目录中,你会在一个目录下找到这些库(就像我拥有的​​那样)

C:\MinGW\lib\gcc\mingw32\4.8.1
Run Code Online (Sandbox Code Playgroud)

和头文件

C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++
Run Code Online (Sandbox Code Playgroud)

"所以在最基本的层面上,它只是让我制作C++程序所需的一些"事物"?"

它是Windows的Minimalist GNU工具链.它通常伴随着GCC(GNU C/C++编译器工具链),以及MSYS极简主义GNU工具环境(包括GNU make,shell等).