哪个C++标头包括哪些其他标头



我对哪个标准库包括哪个其他库感到困惑。我听说iostream包括ostream或类似的东西。不幸的是,我找不到概述。这就是我现在问的原因。

我的程序使用以下库:字符串、fstreamiostreamsstreamstreambuf。因为它们提供了相关的功能,我想知道其中是否有任何已经包括其中的另一个功能。在这种情况下,我可以摆脱多余的包含。

是否有一个概述表明哪个标准库包含哪个?或者我的程序用户的哪些库是多余的?

C++通常不保证任何类型的递归包含。您有责任始终包含所需的所有标头。同样,它不保证不包含任何特定的标准库标头。(例如,您的实现可以合法地始终包含所有标准库标头!这就是原因,因为一切都在 std 命名空间中。

(我相信 C 库标头有一个特殊规定 - 我认为除非您明确包含这些标头,否则您不会在全局命名空间中获得名称。

某些标头确实有特定的要求;例如,在 C++11(但不是之前)中,要求<iostream>同时包含 <ostream><istream> 。但这只是一个具体案例。

您不能依赖任何其他标头包含的任何标头。最好明确包含您需要的所有内容。这样,如果您更改编译器,则可以确保不会破坏编译,以防新编译器没有相同的标头包含结构。

这可能会有所帮助:http://www.cplusplus.com/reference/iostream/iostream/iostream是从ostream和istream继承而来的。

我的规则:#include你正在使用什么。如果您使用的是 std::string ,则需要#include <string> 。如果您使用的是 std::cout ,则需要#include <iostream> 。如果您使用的是文件流,请#include <fstream> .等等。

您可能会从您包含的其他一些系统标头中"免费"获得std::string是无关紧要的。不要依赖幕后人员。

如果您担心多余的包含,它们可以通过宏处理,例如

#ifndef MACRO_NAME #define MACRO_NAME

#endif

所以你不需要担心多个包含我猜。

相关内容

  • 没有找到相关文章

最新更新