可以在没有#include <string>的情况下使用std :: string吗?

che*_*gpu 12 c++ stdstring

这是我的代码:

#include <iostream>

int main(int argc, char const *argv[])
{
    std::string s = "hello";
    std::cout << s.size() << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我可以编译并运行它clang++,虽然我甚至不添加#include <string>.

那么,是否有必要添加#include <string>才能使用std::string

Tar*_*ama 11

您的实现的iostream标头包括string.这不是你可以或应该依赖的东西.如果要使用std::string,则应始终使用#include <string>,否则您的程序可能无法在不同的实现上运行,甚至在当前版本的更高版本中运行.


lis*_*rus 10

简而言之:是的,有必要。

标准库的某些部分经常使用其他部分,因此<string>通过某种方式包含在内<iostream>,并且您的代码可以很好地编译。

如果您不小心决定不再需要<iostream>并删除该包含,则该包含<string>也将被隐式删除,并且您会收到令人困惑的编译错误。这就是为什么放置所有必要的内容是一个好习惯。


Som*_*ude 5

某些标头可能包含其他标头,但这是一个实现问题,而不是您可以指望的。始终明确包含您需要的标头。


Nat*_*per 3

iostream 包括<string>. 它荡漾开来。

实际上,这取决于实现,而不是保证。您应该明确包含所需的标头。