18

我习惯于使用 stl pair 编写代码,而不包括任何特定的头文件来使用 pair。但是今天一位朋友告诉我,每当我使用 pair 时,我都应该使用实用程序头文件,否则我会在某些编译器上遇到问题。请告诉这是不是真的。如果我可以在不使用它的情况下编写代码,那么实用程序头的用途是什么。

4

3 回答 3

26

您几乎应该始终为您在程序中使用的每个类包含头文件,否则您将依赖于某些头文件在内部使用您感兴趣的类的事实,但这可能会在另一个编译器或版本上发生变化。您需要阅读类的引用(例如在 cppreference.com - http://en.cppreference.com/w/cpp/utility/pair上)并检查您需要包含哪个头文件 - 如果std::pair您应该添加#include <utility>. 您不能依赖于这样一个事实,例如,当您使用诸如等之类的操纵器时,您的代码iostream已经包含iomanip并且您的代码可以编译setw。您不能 - 您始终应该参考语言规范并包含所需的标头。

于 2012-11-25T18:14:57.787 回答
10

关键是您可能<utility>通过包含其他一些标头间接包含了标头。通常情况下,头文件被 C++ 实现中的其他头文件包含,而标准没有强制要求包含头文件。因此,通过包含<utility>,您可以确保您的代码在符合标准的实现中是可移植的(至少就这个特定问题而言)。

该标准指定它std::pair是 in <utility>,因此无论何时使用std::pair.

于 2012-11-25T18:11:47.830 回答
6

您始终需要包含定义您使用的组件的标题。一些标准库将被实现以包含它们在内部使用的其他声明,但您根本不能依赖它。我认为标准库使声明可用而不需要它们可用是一个错误。

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

于 2012-11-25T18:16:15.310 回答