#include <iostream.h>非标准输入输出流 #include <iostream>标准输入输出流 C++中为了避免名字定义冲突,特别引入了“名字空间的定义”,即namespace。 当代码中用<iostream.h>时,输出可直接引用cout<<x;//<iostream.h>继承C语言的标准库文件,未引入名字空间定义,所以可直接使用。 当代码中引入<iostream>时,输出需要引用std::cout<<x;如果还是按原来的方法就会有错。 使用<iostream>时,引入std::有以下方法: 1. using namespace std; cout<<x; 2. using std::cout; cout<<x; 3. 最基本的std::cout<<x; 这回你该知道为什么通常用#include <iostream>时, 要用using namespace std;了吧。如果你不用这个,就要在使用cout时,用后两种方法了。 其他头文件也是同样的道理。 (有“.h”的就是非标准的,C的标准库函数,无“.h”的,就要用到命令空间,是C++的。还有一部分不完全是有“.h”和没“.h”的差别。例如:math.h和cmath)
以下内容来自《C++Primer 第四版》
C++标准库除了定义了一些特定于C++的设施外,还包括C标准库。C++中的头文件cctype其实就是利用了C标准库函数,这些库函数就定义在C标准库的ctype.h头文件中。
C标准库头文件命名形式为name.h,而C++版本则命名为cname,少了后缀.h而在头文件名前加了c。c表示这个头文件源自C标准库。因此,cctype与ctype.h文件的内容是一样的,只是采用了更适合C++程序的形式。特别地,cname头文件中定义的名字都定义在命名空间std内,而.h版本中的名字却不是这样。
通常,C++程序中应采用cname这种头文件的版本,而不是采用name.h版本,这样,标准库中的名字在命名空间std中保持一致。使用.h版本会给程序员带来负担,因此他们必须记得哪些标准库名字从C继承而来,而哪些是C++所特有的。
而实际上在Visual Studio中编程时会发现,只#include <iostream>也能直接用printf 和scanf(这两个函数在<cstdio>中)?
这种情况一般是编译环境默认连接了stdio.h造成的。