这是我的代码:
#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
?
答案 0 :(得分:10)
您的实施iostream
标题包含string
。这不是你可以或应该依赖的东西。如果您想使用std::string
,则应始终#include <string>
,否则您的程序可能无法在不同的实现上运行,甚至可能在当前版本的更高版本中运行。
答案 1 :(得分:2)
某些标题可能包含其他标题,但这是一个实现问题,而不是您可以依赖的内容。始终明确包含您需要的标题。
答案 2 :(得分:2)
简而言之:是的,这是必要的。
标准库的某些部分通常使用其他部分,因此通过<string>
以某种方式包含<iostream>
,并且您的代码编译得很好。
如果您不小心决定不再需要<iostream>
并删除该包含,则<string>
也会被隐式删除,并且您会收到令人困惑的编译错误。这就是为什么把所有必要的包括在内是一个好习惯。
答案 3 :(得分:1)
iostream包括<string>
。它涟漪过来。
实际上,这依赖于实现,而不是保证。您应该明确包含所需的标题。