轉載於: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