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