我习惯使用stl对编写代码而不包含任何使用对的特定头文件。但是今天的一位朋友告诉我,每当我使用对,我应该使用实用程序标题我会在某些编译器上遇到问题。请告诉我这是否属实。如果我可以在不使用它的情况下编写代码,那么实用程序头的用途是什么。
答案 0 :(得分:23)
您应该几乎总是为程序中使用的每个类包含头文件,否则您依赖于某些头文件内部使用您感兴趣的类的事实,但这可能会在另一个编译器或版本上发生变化。您需要阅读课程的参考资料(例如在cppreference.com上发布 - http://en.cppreference.com/w/cpp/utility/pair)并检查您需要包含哪个首页文件 - 如果是std::pair
,您应该添加#include <utility>
。您不能依赖这样的事实,例如,iostream
已经包含iomanip
,并且当您使用setw
等操纵符时,您的代码会编译。您不能 - 您总是应该参考语言规范并包括必需的标题。
答案 1 :(得分:10)
关键是你可能通过包含一些其他标题间接包含了<utility>
标题。通常情况下,标头包含在C ++实现中的其他标头中,而标准不强制要求包含标头。因此,通过包含<utility>
,您可以确保您的代码可以跨标准兼容的实现移植(至少就此特定问题而言)。
该标准指定std::pair
位于<utility>
,因此每当您使用std::pair
时都应包括此内容。
答案 2 :(得分:5)
您始终需要包含定义所用组件的标头。一些标准库将被实现为包含它们在内部使用的其他声明,但你完全不能依赖它。我认为标准库使声明可用是一个错误,它们不需要提供。
std::pair
可以使用课程模板<utility>
。