转载于:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1900715.htmlhtml
1.从功能性的角度来说,<iostream>包含了一系列模板化的I/O类,相反地<iostream.h>只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,所以,<iostream>和<iostream.h>在接口和执行上都是不一样的。最后,<iostream>的各组成都是以STL(Standard Template Library,标准模板库)的形式声明的,然而<iostream.h>的各组成都是声明成全局型的。
由于这些实质上的不一样,你不能在一个程序中混淆使用这两个库。作为一种习惯,在新的代码中通常使用<iostream>,但若是你处理的是过去编写的代码,为了继承能够用继续用<iostream.h>就保持代码的一致性。ios
(标准化委员会为了拉拢人心,吸引更多的人入会,决定为包装了std的那部分标准库构建新的头文件名。将现有C++头文件名中的.h去掉,因此就出现了< iostream.h> 和< iostream > 等不少双胞胎。对于C头文件,采用一样方法但在每一个名字前还要添加一个C,因此C的<string.h> 变成了<cstring>。)c++
#include <iostream.h> 和 #include <iostream>
前一个不是c++标准中的,后一个在c++标准中 函数
还有就是平时咱们所用的两种状况,当有输出和输入流时就要注意了。post
换成#include <iostream>,要加一句using namespace std;或把cout改为std::cout,end改为std::endl等等spa
#include <iostream.h>
c++标准化以前的使用方式.
#include <iostream>
using namespace std;
这个必须同时出现.c++标准化后推荐使用的方式.主要是由于namespace的引入. code
#include <..> 是从标准库里直接提取头文件
#include ".. "是先从源文件当前目录提取头文件,再从标准库里提取。
通常本身写的文件用 " " htm
2.为何下面这段代码
blog
1 #include <string.h> 2 void main() 3 { 4 string aaa= "abcsd d"; 5 printf("looking for abc from abcdecd %s\n", 6 (strcmp(aaa,"abc")) ? "Found" : "Not Found"); 7 }
不能正确执行,说是string类型没有定义
而下面: 继承
1 #include <string> 2 using namespace std; 3 void main() 4 { 5 string aaa= "abcsd d"; 6 printf("looking for abc from abcdecd %s\n", 7 (strcmp(aaa,"abc")) ? "Found" : "Not Found"); 8 }
这里的string编译器就认识了,可是strcmp就不认识了呢?
---------------------------------------------------------------
通常一个C++的老的带“.h”扩展名的库文件,好比iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好多改进以外,还有一点就是后者的东东都塞进了“std”名字空间中。
但惟独string特别。
问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫作“string.h”的头文件,包含一些经常使用的C字符串处理函数,好比楼主提到的strcmp。
这个头文件跟C++的string类半点关系也没有,因此<string>并不是<string.h>的“升级版本”,他们是毫无关系的两个头文件。
要达到楼主的目的,好比同时:
#include <string.h>
#include <string>
using namespace std;
或者
#include <cstring>
#include <string>
其中<cstring>是与C标准库的<string.h>相对应,但裹有std名字空间的版本。
转自:http://www.cnblogs.com/leven20061001/archive/2012/09/26/2703685.html