< iostream > 和 < iostream.h > 的區(qū)別
關(guān)鍵詞:< iostream > 和 < iostream.h >
你寫程序的時(shí)候,用< iostream >還是< iostream.h >?
你知道它們有什么區(qū)別么?還是認(rèn)為他們根本就是一樣的?
下面聽我給你吹(文中純屬個(gè)人言論,不涉及國家機(jī)密,請(qǐng)放心閱讀,若轉(zhuǎn)載請(qǐng)注明出處作者^-^)
---majianan
其實(shí)沒有< iostream.h >這樣的東西 --- 標(biāo)準(zhǔn)化委員會(huì)在簡化非C標(biāo)準(zhǔn)頭文件時(shí)用< iostream > 取代了它。但又沒有完全取消< iostream.h >的使用,并且很多編譯器都同時(shí)支持< iostream >和< iostream.h >,造成現(xiàn)在的局面,老大(標(biāo)準(zhǔn)化委員會(huì))確實(shí)有不得已的苦衷。
話說當(dāng)年,在標(biāo)準(zhǔn)化委員會(huì)動(dòng)手重建新的標(biāo)準(zhǔn)庫的時(shí)候,遇到了問題。為了避免類名函數(shù)名的沖突問題,引入了名字空間std,但無數(shù)現(xiàn)有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫中的功能,例如,聲明在< iostream.h >和< complex.h >等頭文件中的功能。現(xiàn)有軟件沒有針對(duì)使用名字空間而進(jìn)行相應(yīng)的設(shè)計(jì)或者升級(jí),如果用std來包裝標(biāo)準(zhǔn)庫導(dǎo)致現(xiàn)有代碼不能使用,那手底下的小弟(程序員)是不會(huì)同意的。
標(biāo)準(zhǔn)化委員會(huì)為了拉攏人心,吸引更多的人入會(huì),決定為包裝了std的那部分標(biāo)準(zhǔn)庫構(gòu)建新的頭文件名。將現(xiàn)有C++頭文件名中的.h去掉,所以就出現(xiàn)了< iostream.h>和< iostream >等很多雙胞胎。對(duì)于C頭文件,采用同樣方法但在每個(gè)名字前還要添加一個(gè)C,所以C的<string.h>變成了<cstring>。
舊的C++頭文件是官方明確反對(duì)使用的,但舊的C頭文件則沒有(以保持對(duì)C的兼容性)。其實(shí)編譯器制造商不會(huì)停止對(duì)客戶現(xiàn)有軟件提供支持,所以在可以預(yù)計(jì)的將來,舊的C++頭文件還會(huì)囂張一段時(shí)間。
如果能明白字符串頭文件的使用,舉一反三,其他的也差不多會(huì)用了。
<string.h>是舊的C頭文件,對(duì)應(yīng)的是基于char*的字符串處理函數(shù);
<string>是包裝了std的C++頭文件,對(duì)應(yīng)的是新的strng類;
<cstring>是對(duì)應(yīng)舊的C頭文件的std版本。
好像跑遠(yuǎn)了,言歸正傳。如果你的編譯器都同時(shí)支持< iostream >和< iostream.h >,那使用#include < iostream >,得到的是置于名字空間std下的iostream庫的元素;如果使用#include < iostream.h >,得到的是置于全局空間的同樣的元素。在全局空間獲取元素會(huì)導(dǎo)致名字沖突,而設(shè)計(jì)名字空間的初衷正是用來避免這種名字沖突的發(fā)生。還有,打字時(shí)< iostream >比< iostream.h >少兩個(gè)字,所以我會(huì)使用< iostream > ^-^
困了,睡了。
馬嘉楠
2005-12-26 午夜
posted on 2006-08-26 09:49
馬嘉楠 閱讀(3808)
評(píng)論(5) 編輯 收藏 引用 所屬分類:
【01】C++