这是我的代码:
#include <iostream>
int main(int argc, char const *argv[])
{
std::string s = "hello";
std::cout << s.size() << std::endl;
return 0;
}
令我惊讶的是,我可以使用clang++
编译并运行它,尽管我甚至不添加#include <string>
。
那么,是否需要添加#include <string>
才能使用std::string
?
您的实现的iostream
标头包括string
。这不是你可以或应该依赖的东西。如果你想使用std::string
,你应该始终使用#include <string>
,否则你的程序可能无法在不同的实现上运行,甚至无法在当前版本的更高版本中运行。
简而言之:是的,这是必要的。
标准库的部分通常使用其他部分,所以<string>
是通过<iostream>
以某种方式包含的,您的代码编译得很好。
如果您意外地决定不再需要<iostream>
并删除该include,那么<string>
也将被隐式删除,并且会出现令人困惑的编译错误。这就是为什么放置所有必要的include是一种很好的做法。
有些标头可能包含其他标头,但这是一个实现问题,不能指望。请始终明确包含所需的标头。
iostream包含<string>
。它涟漪般地流过。
实际上,这取决于实施,而不是保证。您应该明确地包含所需的标头。