iostream 是标头还是库

Is iostream a header or a library

提问人:Shivam Tanwar 提问时间:12/20/2022 最后编辑:HolyBlackCatShivam Tanwar 更新时间:12/21/2022 访问量:892

问:

我刚刚开始学习 cpp,真正让我感到困惑的一件事是 or .有人说我们包含iostream库,有人说这是用于包含头文件的。但是没有扩展名,那么它们怎么可能是头文件呢?另外,我们可以使用吗?这也让我想到了 和 之间的区别。哪个是头文件?哪一个是图书馆?如果我们只包含头文件,那么我们为什么不写呢?#include <iostream>#include<vector>#includeiostreamvector.h#includeiostream.hiostream#include<vector.h>

标准 cpp 库包含哪些内容?较小的库,如容器库、实用程序库?

我尝试查看 cppreference 但无法理解

C++ 包含 头文件 IOSTREAM

评论

0赞 Puelloc 12/20/2022
那些头文件只是没有扩展名,stackoverflow.com/questions/441568/......
0赞 Peter 12/20/2022
<iostream>是在所有 C++ 标准中指定的标头(具有一些变体)。它提供了类型的声明(例如 和 ) 和 objects(例如 )。从 C++11 开始,它是与 I/O 相关的其他标准标头(例如 )。像所有标准标头一样,它是 C++ 标准库的一个组件(具体来说 - 它的目的是为代码提供一个定义的接口来使用库的各个部分)。 从未成为标准C++的一部分,而是第一个C++标准(1989年批准)之前的前身。std::istreamstd::ostreamstd::cout#include<ios><iostream.h><iostream>
1赞 john 12/20/2022
不能包含库,因为它们不是源代码。 始终引用源文件,该文件的名称可以是任何内容。扩展名很常见,但 C++ 标准标头没有任何扩展名。说你正在包含一个库的程序员使用了错误的术语。#include.h.hpp
3赞 Jarod42 12/20/2022
@john:“#include 始终引用源文件”。标准标头不一定是实际文件,编译器可以使用另一种方法,如内存 AST 或数据库,或者这些方法的“内部函数”。
1赞 BoP 12/20/2022
“我们为什么不写 #include< vector.h>?”在C++标准出现之前,头文件使用各种扩展名,如.h,.hpp。.hxx,甚至 .h++。在编写标准时,委员会无法就使用其中的哪一个达成一致。最后的折衷方案是使用扩展名,所以.<vector>

答:

8赞 HolyBlackCat 12/20/2022 #1

iostream其他是头文件。

通常标头有 or 扩展,但这只是一个约定。C++ 标准库使用不同的约定,即没有扩展。.h.hpp


什么算作图书馆是没有意义的。“库”可以指:

  1. 单个 、 、 或文件(或其他内容,具体取决于您的平台)。.a.so.lib.dll
  2. 供程序员使用的预定义实体的集合。

单个标准标头绝对不是 (1)。整个标准库是 (2),通常分为几 (1) 个。

每个单独的标准标头是否算作 (2) 是没有意义的,我不会这样称呼它们。

C++ 标准将标准库拆分为多个头组,并将每个标头组称为“库”(2)。Cppreference 也做同样的事情。

评论

0赞 Peter 12/20/2022
在 C++ 标准中,库的概念是您描述的“供程序员使用的预定义实体的集合”。库文件(例如 、 等)是实现的特定方面,因此在标准中没有指定(允许实现做他们喜欢的事情)。而且,顺便说一句,标准头文件不需要是文件(尽管它们在实践中经常是,但我知道有一个工具链附带了一个预编译数据库,预处理器会查询(例如,响应)而不是一组单独的“头文件”)。.a.lib#include <iostream>
0赞 HolyBlackCat 12/20/2022
@Peter“库文件...是实现的特定方面“嗯,我不想找一个严格的语言律师答案。“我知道一个工具链”好奇,那个工具链是什么?
0赞 Shivam Tanwar 12/20/2022
@HolyBlackCat,所以实际上我们正在做的是包含编译器中的头文件?就像我们使用 include cmath 一样,我们包含数学头文件,其实际库可能是 libm.lib 或其他任何东西。但是 cppreference 只是将一堆头文件称为库,这与实际库有很大不同,因为库包含头文件的实际定义,并且不是人类可读的。我做对了吗?
1赞 HolyBlackCat 12/20/2022
@ShivamTanwar“在编译器中”——我会说“与编译器一起分发”,但是是的。“因为库包含实际定义”单词有不同的含义。Cppreference 在这里使用 (2),您使用 (1)。两者都有效。
0赞 Hudson 12/21/2022 #2

这样说吧:iostream 和其他 #include 项实际上是包含内置函数库和其他C++语言内容的头文件。专门帮助您使用 CIN、COUT 等通过终端进行输入和输出。另外,这里有一个提示:如果你想避免繁琐地需要添加每个头文件,以便你可以使用各种函数和其他项目,只需 #include < bits/stdc++.h>,它实际上只是一个包含所有其他头文件及其库的头文件;它应该让你的生活更轻松。

评论

0赞 Null 12/23/2022
添加一个包含一堆不必要的标头的标头可能会让你在尝试编译它时更轻松,但这不是一个好的做法。