c++ - C++ 标准库是如何在幕后工作的?

标签 c++ c++-standard-library

在过去的几天里,这个问题一直困扰着我。我想知道标准库在功能方面是如何工作的。即使查看 source code,我也无法在任何地方找到答案。由 LLVM 编译器提供,对于像我这样的初学者来说,这是一段非常复杂的代码。

我在这里主要想了解的是 C++ 标准库是如何工作的。例如,让我们以 fstream 头文件为例,它由一堆有助于写入和读取文件的函数组成。

它是如何工作的?它是否使用操作系统特定的 API(因为库是跨平台的),还是什么?而且,如果标准库可以做到这一点,我难道不应该在不调用标准 fstream 文件的情况下也能弄乱一些文件(根据我的经验,我不能这样做)吗?

如果我不是以英语为母语的人,如果我的问题不清楚,我深表歉意:请随时修改此文本以使其更清晰。

最佳答案

Does it use the OS specific API (since the library is cross platform), or what?

在某些时候,会使用操作系统特定的 API。 fstream 实现不一定直接调用操作系统函数。它可能会使用其他类,这些类调用从 C 继承的函数等,但最终调用链将导致 OS 调用。 (是的,对于中级程序员来说,细节通常过于复杂。所以,作为一个自称是初学者,你的发现并不奇怪。)

库是跨平台的,在您(C++ 程序员)端,无论平台如何,接口(interface)都是相同的。但是,它不是每个平台上的同一个库。每个平台都有自己的库,在 C++ 端公开相同的接口(interface),但使用不同的操作系统调用。 (事实上​​,同一个平台可能有多个标准库,因为库实现是由您的工具链提供的,而不是由标准委员会提供的。)

And, if the standard library can do it, aren't I supposed to be able to mess with some files as well without calling the standard fstream file (which to my experience I can't do)?

是的,您可以这样做。显然,您还不能做到,但通过一些练习和指导,您应该能够做到。标准库中的所有内容都可以在您自己的代码中重新创建。标准库(以及大多数库,就此而言)的重点是节省您的时间,而不是启用原本不可用的东西。例如,您不必为您编写的每个程序都实现文件流;它位于标准库中,因此您可以专注于项目中更有趣的方面。

关于c++ - C++ 标准库是如何在幕后工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61861026/

相关文章:

c++ - 如果字符串 vector 包含 char 'p',我如何检查 C++

c++ - VS 代码无法检测标准 C++ 库

c++ - 在 std::accumulate 中使用变异函数

c++ - 在 Windows 控制台应用程序中输出 unicode 字符串

c++ - C/C++ 关于跟踪编程技术的问题

c++ - 在 std::map 中查找不存在的键

c++ - 如何修复 LU 分解?

c++ - 指针电阻

c++ - 分配但不使用分配器的标准库设施

c++ - 使用分配器对 HashMap 进行高效序列化和反序列化