STL中用于pair的头文件

22

我习惯使用stl pair编写代码,而无需包含任何特定的头文件来使用pair。但今天朋友告诉我,每当我使用pair时,我应该使用utility头文件,否则在某些编译器上会出现问题。请告诉我这是真的吗?如果我可以不使用它编写代码,那么utility头文件的作用是什么。

3个回答

31
你在编程时几乎总是需要为每个使用的类包含头文件,否则你将依赖于一些内部使用你所需类的头文件,但这可能会因为另一个编译器或版本而发生改变。你需要查阅类的参考文献(例如在cppreference.com上 - http://en.cppreference.com/w/cpp/utility/pair),并检查哪个头文件需要包含 - 在使用std::pair时,你应该添加#include <utility>。例如,在使用setw等操纵符时,不能依赖于iostream已经包括iomanip并且你的代码能够编译通过。你不能这样做 - 你总是应该参考语言规范并包含所需的头文件。

10

重点是你可能已经通过包含其他头文件而间接地包含了 <utility> 头文件。通常情况下,在 C++ 实现中,头文件会被其他头文件包含,而这种包含并不是由标准规定的。因此,通过包含 <utility>,你可以确保你的代码在符合标准的实现中是可移植的(至少在这个特定问题上是如此)。

标准指定 std::pair<utility> 中,所以在使用 std::pair 时应该包含它。


6

您始终需要包含定义所使用组件的标头。一些标准库将被实现以包含其内部使用的其他声明,但是您不能完全依赖此功能。我认为标准库公开了它们不必公开的声明是错误的。

类模板std::pair<utility>提供。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接