c++ - C++ 标准库中的哪些头文件保证包含另一个头文件?

标签 c++ c++11 c++14 header-files c++20

C++ 标准库头文件可能以未指定的方式相互包含,因此程序员通常不应该依赖一个头文件来包含另一个头文件。但是,在少数情况下,可以保证一个 header 包含另一个 header ,或者使某些功能可用,否则这些功能需要包含另一个 header 。那些是什么情况?

最佳答案

此答案忽略 C header - <meow.h><cmeow>那些。 C++ 库头文件(所有引用均指向 N4659):

<initializer_list>保证包含在:

<iostream>保证包括<ios> , <streambuf> , <istream> , 和 <ostream> (§30.4.1 [iostream.syn])。

<ios>保证包括<iosfwd> (§30.5.1 [ios.syn])。

<bitset>保证包括<string><iosfwd> (§23.9.1 [bitset.syn])。

免费功能模板std::begin , std::end , C++14 c- , r- , 和 cr-版本和 C++17 免费函数模板 std::size , std::emptystd::data名义上居住在<iterator> , 但如果包含以下任何 header 也可用:<array> , <deque> , <forward_list> , <list> , <map> , <regex> , <set> , <string> , <unordered_map> , <unordered_set> , 和 <vector> (§27.7 [iterator.range],§27.8 [iterator.container])。

<string_view>包括在内,*begin*end函数和两个通用 std::swap [utility.swap] 中定义的重载( swap(T&, T&)swap(T (&a)[N], T (&b)[N]) ) 保证可用。 size/empty/data ,然而,不是。 (§24.4.1 [string.view.synop])。

关于c++ - C++ 标准库中的哪些头文件保证包含另一个头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614983/

相关文章:

c++ - 在不禁用 cout/cin 的情况下获取标准输出内容

c++ - 如何在 DOSBOX 中编译使用 graphics.h 的代码?

c++ - 为什么在 C++14 中不推荐使用 std::shuffle 方法?

c++ - std::shared_ptr 未更新其计数

c++ - C++14 中泛型 Lambda 中的静态自动变量

c++ - 使用哪个编辑器?用于编码 c/c++

c++ - ostringstream 给了我隐式实例化错误

c++ - 使 std::for_each 更有用——让仿函数知道当前索引是个好主意吗?

c++ - 错误:尝试使用 boost::asio::async_read 读取时, 'const_iterator' 中没有名为 'class boost::asio::mutable_buffer' 的类型

c++ - 是否有 std::lock_guard<std::mutex> lock(m) 的简写?