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

KOB*_*KOB 20 c++ string types iostream include

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

<string>如果我想包含标题,我是否必须包含<iostream>标题?为什么?有什么区别吗?

Luc*_*ore 22

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

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


And*_*owl 7

<string>如果我想包含标题,我是否必须包含<iostream>标题?

是的,你必须.您不能依赖于相关标头(例如<string>)#include通过其他标头间接(例如<iostream>),尽管在某些实现中可能就是这种情况.

即使这似乎有效,如果不是某些运算符的所有相关重载都被导入,或者如果一个类在标题中向前声明,那么它可能会导致麻烦#include,但是该类的信息来自其他一些class仅包含在未获得#included 的标头中.

例如,请参阅StackOverflow上的此问答,以获取此类情况的示例.