以下3个课程有何不同?是< iostream>头文件或C ++标准库?
#include<iostream>
using namespace std;
int main()
{
return 0;
}
#include<iostream>
int main()
{
return 0;
}
#include<iostream.h>
int main()
{
return 0;
}
提前致谢。
答案 0 :(得分:13)
对于生成的程序,没有区别 - 因为程序引用了iostream
库中的任何内容,所以任何智能编译器都不会编译这些库。
当您#include <iostream>
时,您将包含带有iostream
标准库声明的头文件。使用#include <iostream.h>
与#include <iostream>
基本相同,除了它定义全局命名空间中的所有库名称而不是std::
- 它与程序的反向兼容性使用iostream
的原始版本,但未删除.h
。 (<iostream.h>
版本通常也不支持宽字符,但只支持标准char
。)
using namespace std;
表示当前文件中名称引用的默认名称空间为std
,这是大多数标准库函数使用的名称空间。虽然这意味着您不必使用std::
为所有标准库调用添加前缀,但这也意味着您必须小心不要定义与标准库名称重叠的任何内容。
答案 1 :(得分:3)
头文件
没有3问题标头iostream.h是一个非标准的标头,并不存在于所有平台上。事实上,它在我的系统中不存在(使用g ++和GNU libstdc ++)。所以使用它的任何代码都不会在我的系统上编译。
iostream.h标头曾经在C ++于1998年首次标准化之前很常见。但是由于98标准使用了<iostream>
而不是<iostream.h>
,后者已经失宠了(非所有平台都不再支持标准版和所有版本。使用它的代码应被视为非标准遗留代码,并且不可移植。教它的书应该被认为是过时的和避免的.�
答案 2 :(得分:2)
iostream
是一个头文件,提供声明和原型,它们是部分C ++标准库的接口。
在您的系统上,有一个名为“iostream”(无扩展名)的文件,其内容在您编写{{1}时复制并粘贴(通过递归处理#include
s) }}
#include <iostream>
指令总是引入头文件的内容,它们永远不会添加“库”。头文件通常包含作为库接口的声明和原型,但实际库本身由链接器而不是编译器附加到程序中。链接C ++程序时,链接器将自动附加C ++标准库,除非您不告诉它,因此您不必担心这一点。
同样,#include
语句不执行附加库的工作。此声明仅使您可以编写using namespace std
或cout
,而不是将其限定为string
和std::cout
。这适用于任何名称空间,但通常不鼓励。
对于您给出的三个示例,它们都为您提供了使用C ++标准库的iostream部分所需的定义和原型,但是(2)是首选,(1)是可接受的,并且(3)已弃用。 (2)给出了额外的便利,可以省略std::string
前缀(代价是减少你自己可以使用的变量名),以及(3)包含一个名为“iostream.h”的不同文件。而不是“iostream”,这通常是相同的,但带有.h的文件是预标准C ++的遗留物,因此未来的编译器可能不支持。
答案 3 :(得分:1)
前两个程序是标准C ++程序,而第三个程序使用非标准头文件<iostream.h>
在第一个程序中using namespace std
将整个名称空间std
纳入范围。
有关详细信息,请查看 this 。