【问题标题】:Using swap() without #including its library? [duplicate]在没有#include 库的情况下使用swap()? [复制]
【发布时间】:2014-05-04 05:18:07
【问题描述】:

我有一个简单的程序,我在其中按升序或降序排列int 数组的元素,并使用swap() 函数来移动元素。我编译了这个程序,没有任何错误,它运行起来就像一个魅力。事后我才注意到,在我编译之前,我忘记了#include 定义了swap() 的库(<algorithm>,或<utility> C++11)。

为什么它仍然有效?我的程序的顶部看起来像这样:

#include <iostream>
#include <cstdlib>
using namespace std;

我尝试取出&lt;iostream&gt;,只是想看看会发生什么,它可以预见地发出一堆'cout/cin/endl' was not declared in this scope 错误,但我惊讶地发现它也给出了一些'swap' was not declared in this scope 错误。这是否意味着swap()&lt;iostream&gt; 中定义?我不认为它应该是,不是吗?

无论如何,对于一个简单的答案来说,这可能是一个很长的问题,但我很好奇。我还在学习CC++,所以我不知道很多东西,而且我无法通过“全能”谷歌机器找到这个特殊谜团的答案,所以我来了。

提前致谢!

【问题讨论】:

  • iostream 可以包含它需要的任何标头。但是,您不能依赖这种间接包含,否则您的代码可能无法在其他环境中编译。
  • 所以我的&lt;iostream&gt; 版本可能与标准版本不同?我没有在自己的系统上工作,所以我不知道库可能会或可能不会进行哪些更改。
  • @TheQZ:他并不是说你的&lt;iostream&gt; 有什么问题。该标准允许它包含其他标题,但它不是必须的。如果您不直接包含您使用的所有标头,您的代码可能会在其他编译器上中断,它们提供了同样有效的 &lt;iostream&gt; 版本,不包含任何其他内容。
  • 我的理解是C++标准并没有规定STL lib头文件应该如何相互依赖,所以根本没有标准版本。
  • 好的,有道理。我正在使用的编译器的&lt;iostream&gt; 有自己的#includes,在其他编译器中可能存在也可能不存在,所以无论如何#include 其他库更安全。

标签: c++ c++11 swap


【解决方案1】:

一般情况下,依赖包含其他头文件的头文件。

始终包含和包含您需要的头文件。

例如,如果你想使用std::swap(),谷歌它,你会看到在c++98中是否需要&lt;algorithm&gt;,在c++11中是否需要&lt;utility&gt;,所以你应该包含要制作的文件确保您的代码可以编译。

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 2021-09-28
    • 2016-04-27
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多