我开始学习 C++ 并且读了一本书,其中写道我必须使用<string>
头文件,因为字符串类型不是直接内置到编译器中的。如果我使用<iostream>
我可以使用字符串类型。
如果我<string>
包含标题,我想使用字符串类型时是否必须包含<iostream>
标题?为什么?有什么区别吗?
是的,您必须包括您使用的内容。不强制要求标准标头相互包含(IIRC 除外)。它现在可能工作,但可能会在不同的编译器上失败。
在您的情况下,显然<iostream>
包括<string>
直接或间接地,但不要依赖它。
如果我
<string>
包含标题,我想使用字符串类型时是否必须包含<iostream>
标题?
是的,你必须。您不能依赖于通过其他标题(例如 )间接调用的相关标题(例如<string>
),尽管在某些实现中可能是这种情况。#include
<iostream>
即使这看起来可行,但如果不是导入了某些运算符的所有相关重载,或者如果一个类在标头中前向声明 you #include
,但有关该类的信息是从其他一些派生的类只包含在没有得到#include
d 的标头中。
例如,请参阅StackOverflow 上的此问答,了解此类情况的示例。