我开始学习C ++,并且我读了一本书,写道我必须使用<string>
头文件,因为字符串类型不是直接构建到编译器中的。
如果我使用<iostream>
,我可以使用字符串类型。
如果我想要使用字符串类型,如果我包含<string>
标头,是否必须包含<iostream>
标头?为什么?有什么不同吗?
答案 0 :(得分:20)
是的,您必须包含您使用的内容。没有强制要求标准标题彼此包含(除了IIRC之外的一些例外)。它可能现在可以工作,但可能在另一个编译器上失败。
在您的情况下,显然<iostream>
直接或间接包含<string>
,但不依赖它。
答案 1 :(得分:7)
如果我想要使用字符串类型,是否包含
<string>
标题,是否必须包含<iostream>
标题?
是的,你必须这样做。您不能通过其他标头(例如<string>
)间接依赖相关标头(例如#include
)为<iostream>
d,但在某些实施中可能就是这种情况。
即使这可能似乎起作用,如果不是某些运算符的所有相关重载都被导入,或者如果一个类在标题中向前声明,那么它可能会导致麻烦{{ {1}},但该类派生自其他类的信息仅包含在未获得#include
d的标题中。
例如,请参阅this Q&A on StackOverflow了解此类情况的示例。