对stl的头文件

use*_*957 16 c++ stl

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

Mac*_*iek 23

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


jua*_*nza 10

关键是你可能<utility>通过包含一些其他标题间接包含了标题.通常情况下,标头包含在C++实现中的其他标头中,而标准不强制要求包含标头.因此,通过包含<utility>,您可以确保您的代码可以跨标准兼容实现移植(至少就此特定问题而言).

标准指定std::pair<utility>,所以每当你使用时都要包括它std::pair.


Die*_*ühl 5

您始终需要包含定义所用组件的标头.一些标准库将被实现为包含它们在内部使用的其他声明,但你完全不能依赖它.我认为标准库使声明可用是一个错误,它们不需要提供.

类模板std::pair可用<utility>.