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