【问题标题】:Can std::string be used without #include <string>? [duplicate]可以在没有#include <string> 的情况下使用 std::string 吗? [复制]
【发布时间】:2016-01-25 19:02:36
【问题描述】:

这是我的代码:

#include <iostream>

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

令我惊讶的是,我可以使用clang++ 编译和运行它,尽管我什至不添加#include &lt;string&gt;

那么,是否需要添加#include &lt;string&gt; 才能使用std::string

【问题讨论】:

    标签: c++ stdstring


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      如果您不小心决定不再需要 &lt;iostream&gt; 并删除该包含,&lt;string&gt; 也将被隐式删除,您会得到一个令人困惑的编译错误。这就是为什么放置所有必要的包含是一个好习惯的原因。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          iostream 包括&lt;string&gt;。它泛滥成灾。

          实际上,这取决于实现,而不是保证。你应该明确地包含你需要的标题。

          【讨论】:

            猜你喜欢
            • 2014-10-17
            • 2015-02-07
            • 2012-07-01
            • 1970-01-01
            • 2023-01-22
            • 1970-01-01
            • 2012-07-03
            • 2013-08-01
            • 1970-01-01
            相关资源
            最近更新 更多