为什么我不需要包含cstdlib,如何禁用它?我在Windows 7上使用Code :: Blocks with GCC编译器。
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello" << endl;
system("pause");
return 0;
}
答案 0 :(得分:7)
您不需要包含<cstdlib>
,因为system()
包含<iostream>
(或其中包含<cstdlib>
的部分内容)。未指定标准标头是否包含或包含哪些其他(标准)标头。您无法禁用此行为,但应注意它以避免不同标准库实现之间的可移植性问题。
您不应该依赖此行为并自行添加std::system
。您还应该使用system
而不是全局<c*>
。 std
标头中的函数只能保证在<*.h>
名称空间中(全局名称,另一方面,{{1}}标题中)。
答案 1 :(得分:4)
我正在使用MS Visual Studio 2012,其中&lt; iostream>
包括<istream>
,其中包含<ostream>
,其中包含<ios>
,其中包含<xlocnum>
。 <xlocnum>
包含<cstdlib>
,因此您的计划间接包含<cstdlib>
尽管其他编译器和/或实现中包含的顺序可能不同,但此代码运行的原因是<iostream>
,直接或间接包含<cstdlib>
。
应该注意iostream
包含的库是特定于实现的,并且代码可能无法在其他编译器中编译。作为一般规则,头文件包含的库通常没有详细记录或标准的一部分,因此不要依赖间接包含。如果您需要一个库,请直接包含它,并且由于标准库为include guarded,因此在您的程序编译或运行时不会产生重大overhead。