对stl的头文件

时间:2012-11-25 18:09:28

标签: c++ stl

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

3 个答案:

答案 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>