Luc*_*ore 22
是的,你必须包括你使用的东西.没有强制要求标准标题彼此包含(除了IIRC之外的一些例外).它可能现在可以工作,但可能在另一个编译器上失败.
在您的情况下,显然<iostream>包括<string>,直接或间接,但不依赖它.
<string>如果我想包含标题,我是否必须包含<iostream>标题?
是的,你必须.您不能依赖于相关标头(例如<string>)#include通过其他标头间接(例如<iostream>),尽管在某些实现中可能就是这种情况.
即使这似乎有效,如果不是某些运算符的所有相关重载都被导入,或者如果一个类在标题中向前声明,那么它可能会导致麻烦#include,但是该类的信息来自其他一些class仅包含在未获得#included 的标头中.
例如,请参阅StackOverflow上的此问答,以获取此类情况的示例.