iostream.h和iostream 區別

          轉自:http://hi.baidu.com/laddie10/blog/item/079b1d4c32d7d8fcd62afc25.html

          C++中新定義的方法都是有名字空間的 比如cout就屬于std名字空間 如果include頭文件的時候加上.h,默認會using namespace 否則需要自己加上 using namespace XXX 對于C中已經定義的方法如printf,沒有影響的

          iostream.h是包含輸入/輸出流處理的頭文件,iostream就什么都不是了
          但用iostream要加名詞空間namespace

          #include<iostream.h>
          或者是
          #include<iostream>
          using namespace std;
          二者都行

          #include<iostream.h>是C語言中比較通用的
          #include<iostream>
          using namespace std;
          是C++中比較通用的

          #include <iostream.h>這樣寫,里面的函數都是全局函數.

          不加.h的是現在C++中規定的標準,目的在于使C++代碼用于移植和混合嵌入時不受擴展名.h的限制,避免因為.h而造成的額外的處理和修改
          而加.h的是c語言的用法,但是在c++中也支持這種用法,主要是為了向下兼容c 的內容,我們平時盡量不用這種方法
          iostream是現在C++中規定的標準,目的在于使C++代碼用于移植和混合嵌入時不受擴展名.h的限制,避免因為.h而造成的額外的處理和修改。iostream包含的基本功能和對應的舊頭文件相同,但頭文件的內容在名字空間std中。(在標準化的過程中,庫中有些部分的細節被修改了,所以舊頭文件和新頭文件中的實體不一定完全對應。) 一般情況下應該用這個頭文件,而iostream.h則是老式的,以后有可能被淘汰。
               

                經常在CSDN以及其他之類的技術論壇上問關于C++ 頭文件的問題。提出這些問題的往往就是那些剛學C++的新手。當初我是菜鳥的時候也問過類似的問題。

               現在來看看下面兩個include:

               #include<iostream>      // 這個就是1998年標準化以后的標準頭文件

               #include<iostream.h>        // 這個就是標準化以前的頭文件

               更本質上的區別就是iostream把標準C++庫的組件放在一個名位std的namespace里面。而相對的iostream.h則將這些標準組件放在全局空間里,同時在標準化以后舊有的C標準庫也已經經過改造了。 使用前者,就需要在代碼中添加語句:using namespace std;

               看看下面這兩個頭文件

               // 標準化后經過改造的C的標準庫,所有的組件都放在了std中

               #include<cstdio>           

               // 標準化以前C++中的C標準庫

               #include<stdio.h>

               // 在看看這個頭文件C標準庫下 基于char* 的字符處理函數庫

               #include<string.h>

               // 在標準化以后他變成了這樣

               #include<cstring>

               // 但是很多朋友還看見過這個字符串處理函數庫,他包含了新的string class

               #include<string>

               經過了標準委員會如此大規模手術后,在98年以前出品的C++編譯器(BC3.0,BC5.0)上能順利通過編譯的源文件,在支持新標準的編譯器上可能無法順利通過編譯也就是很正常的事了。

          [起因]

               在回過頭來看看標準程序庫,這個程序庫涵蓋范圍相當廣大,提過了許許多多好用的功能。正是因為這樣標準程序庫中class的名稱和函數名與第三方提供的程序庫中的class名或是函數名發生名字沖突的可能性大大增大。為了避免這個問題的發生,標準委員會決定將標準程序庫中每一樣東西都放在namespace std中。但是這么做同時有引來了一個新的問題。很多C++程序代碼依賴那些已經存在很多年的C++ “準”標準程序庫(C++遲遲未標準化才導致這些情況的發生),例如iosteam.h,complex.h等等。

               為了解決這個新出現的問題,標準化委員會決定設計一些新的頭文件名,給那些穿上std外衣的組件所使用。把C++頭文件的.h去掉,于是就有前面出現的iostream,同樣C的頭文件也做了相同的處理,同時在前面加上了一個字母c,以表示是C的頭文件(感覺上有中種族歧視的感覺)。同時標準化委員會聲明就有的C++頭文件將不再列于被支持的名單之中了,而舊有的C頭文件為了滿足“對C的兼容性”這個古老契約,仍然將繼續存活下去。

          但是,那些編譯器廠商不可能去推翻他們客戶的舊有編譯器(也跟本不會去這么做),所以那些舊有的C++頭文件仍然茍延殘喘的活了下來,并不斷的擾亂那些C++新兵的心智。

               下面就是現在大多數C++開發工具表示頭文件的組織狀態:

          1.     舊的C++頭文件 比如iostream.h,他們雖然被標準化委員會所拋棄,但由于各大廠商為了各自的商業利益仍然將繼續存活下去,這些頭文件的內容將不處于namespace std中。

          2.     新的C++頭文件如iostream雖然提供了和舊有頭文件相同的功能,但他的內容都并入了namespace std中,從而有效避免了名字污染的問題。

          3.     標準C的頭文件如stdio.h繼續獲得支持,這類文件的內容并未放在std中。

          4.     C函數庫的技能也有對應的新式C++版本,起名稱類似cstdio,這類頭文件的內容也有幸穿上了std的外衣。

          其實標準化以后的標準程序庫的改動并不只有這些而已,很多的標準化組件都被“tamplate化”。其中就有元老級人物iostream。標準程序庫的問題并不是用一篇,兩篇文章就可以說清楚的。如果你像進一步的了解C++的標準程序庫的話,你可以看看侯先生的《C++標準程序庫》。

          posted on 2008-06-20 19:34 hijackwust 閱讀(45669) 評論(11)  編輯  收藏

          評論

          # re: iostream.h和iostream 區別 2009-12-14 20:43 黑劍

          這個好像不對吧。。。
          在VS里,
          #include <iostream.h>
          根本通不過編譯  回復  更多評論   

          # re: iostream.h和iostream 區別 2009-12-17 10:47 y_bboo

          還是不太明白原理...
          昨天用#include<iostream.h>還可以編譯通過,今天就不行了,郁悶
          改成#include<iostream>
          use namespace std;
          就可以了

          但是試一下之前編譯通過的iostream.h程序,還是可以編譯的,稍微修改下也不可以用了

          樓主,這是什么問題呢?  回復  更多評論   

          # re: iostream.h和iostream 區別 2010-07-12 17:02 淘寶網女裝皇冠店

          iostream.h是包含輸入/輸出流處理的頭文件,iostream就什么都不是了   回復  更多評論   

          # re: iostream.h和iostream 區別[未登錄] 2010-07-15 18:41 FatBear

          不會吧 我這兒挺正常的@黑劍
            回復  更多評論   

          # re: iostream.h和iostream 區別 2010-12-23 09:37 李果

          iostream.h 在c++ 里面報錯?!  回復  更多評論   

          # re: iostream.h和iostream 區別 2011-03-14 19:40 xiaoluob

          可以通過啊
          ,我剛試的  回復  更多評論   

          # re: iostream.h和iostream 區別 2011-04-10 14:02 Phyking

          vs2008中用#include<iostream.h>不行。
          下面的可以
          #include<iostream>
          use namespace std;   回復  更多評論   

          # re: iostream.h和iostream 區別 2011-10-02 13:44 zengyu

          很好啊;四種形式的頭文件;看來并不是.h的就是舊式的c的頭文件;還有可能是未標準化的c++的頭文件;現在應該都用標準化的東西;那么只要不用.h的頭文件;那么就是用的標準頭文件了  回復  更多評論   

          # re: iostream.h和iostream 區別 2012-12-02 17:44 Ronando

          樓主只說了表象,沒有深究原因啊~~
          c++ 嚴格來說是: c , obejcted-oriented c++, template c++, STL 的語言聯邦。
          <iostream.h> 屬于c 那一部分, 存在于全局的命名空間
          <iostream> 屬于c++ 之余 std:: 下的那一部分。 為了兼容性, 不得已保留了iostream.h
          這就是為什么 #include<iostream.h> 不許要使用 using namespace std; 來聲明的原因了  回復  更多評論   

          # re: iostream.h和iostream 區別 2014-04-16 13:11 路人江

          建議回復說#include<iostream.h>報錯的找一下自己的系統中有沒有iostream.h這個文件。以我自己為例,雖然安裝了VS2010,但編譯器include路徑下只有“iostream”文件,而沒有“iostream.h”。
          用txt打開iostream,文件首行內容就是“iostream standard header for Microsoft”,VS直接不帶后綴,這也許就是上面所說的“目的在于使C++代碼用于移植和混合嵌入時不受擴展名.h的限制,避免因為.h而造成的額外的處理和修改”。  回復  更多評論   

          # re: iostream.h和iostream 區別 2014-04-17 10:20 arlk0rs

          vs2008 iostream.h不存在。
          #include <iostream>
          using namespace std;
          這倆句必須要,要不編譯通不過。
          error C2065: “cout”: 未聲明的標識符  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2010年7月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆檔案(57)

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 名山县| 柳州市| 石泉县| 永吉县| 大同市| 肥乡县| 香格里拉县| 临邑县| 贡嘎县| 邻水| 郸城县| 黄骅市| 凤台县| 广元市| 大兴区| 江门市| 启东市| 临武县| 改则县| 红桥区| 大余县| 陆丰市| 新巴尔虎左旗| 长沙市| 临汾市| 五河县| 集贤县| 东台市| 南陵县| 清徐县| 金秀| 呼图壁县| 太仓市| 格尔木市| 东阿县| 工布江达县| 镇原县| 大冶市| 华阴市| 丰镇市| 阿图什市|