6

为什么我不需要包含 cstdlib 以及如何禁用它?我在 Windows 7 上使用带有 GCC 编译器的 Code::Blocks。

#include <iostream>

using std::cout;
using std::endl;

int main()
{
    cout << "Hello" << endl;

    system("pause");
    return 0;
}
4

2 回答 2

7

您不需要包含<cstdlib>,因为它(或包含 的部分system())已包含在<iostream>. 未指定标准头文件是否包含其他(标准)头文件。您不能禁用此行为,但应注意它以避免不同标准库实现之间的可移植性问题。

你不应该依赖这种行为并包括<cstdlib>你自己。您还应该使用std::system而不是全局system. 头文件中的函数<c*>只保证在std命名空间中(另一方面,全局函数在头文件中<*.h>)。

于 2013-09-29T09:38:28.953 回答
3

我正在使用 MS Visual Studio 2012 并在其中 <iostream>包括<istream>which includes <ostream>which includes <ios>which includes <xlocnum><xlocnum>包括<cstdlib>,所以你的程序间接包括<cstdlib>

尽管在其他编译器和/或实现中包含的顺序可能不同,但此代码运行的原因<iostream>是 直接或间接包含<cstdlib>

应该注意的是,iostream包含的库是特定于实现的,代码可能无法在其他编译器中编译。作为一般规则,头文件包含的库通常没有很好的文档记录或标准的一部分,因此不要依赖间接包含。如果您需要一个库,请直接包含它,并且由于标准库是包含保护的,因此不会对程序的编译或运行时造成重大开销。

于 2013-09-29T09:53:34.957 回答