我是否必须在<iostream>旁边使用#include <string>?</iostream> </string>

时间:2013-05-12 09:49:15

标签: c++ string types include iostream

我开始学习C ++,并且我读了一本书,写道我必须使用<string>头文件,因为字符串类型不是直接构建到编译器中的。 如果我使用<iostream>,我可以使用字符串类型。

如果我想要使用字符串类型,如果我包含<string>标头,是否必须包含<iostream>标头?为什么?有什么不同吗?

2 个答案:

答案 0 :(得分:20)

是的,您必须包含您使用的内容。没有强制要求标准标题彼此包含(除了IIRC之外的一些例外)。它可能现在可以工作,但可能在另一个编译器上失败。

在您的情况下,显然<iostream>直接或间接包含<string>,但不依赖它。

答案 1 :(得分:7)

  

如果我想要使用字符串类型,是否包含<string>标题,是否必须包含<iostream>标题?

是的,你必须这样做。您不能通过其他标头(例如<string>)间接依赖相关标头(例如#include)为<iostream> d,但在某些实施中可能就是这种情况。

即使这可能似乎起作用,如果不是某些运算符的所有相关重载都被导入,或者如果一个类在标题中向前声明,那么它可能会导致麻烦{{ {1}},但该类派生自其他类的信息仅包含在未获得#include d的标题中。

例如,请参阅this Q&A on StackOverflow了解此类情况的示例。