輸入輸出歷來都是語言的重要部分,在c++中,該庫也是佔據了相當大的一部分。 c++的輸入輸出庫是其遵循物件導向設計的結果,並結合了泛型程式設計。
以下是這些庫類的關係圖(箭頭標示繼承,白框表示摸板,黑框表示摸板例項):
該檔案的全稱是「input output stream forward」,即輸入輸出流前向宣告。 顧名思義,該標頭檔案的主要目的就是為使用者提供所有輸入輸出類的宣告。
當你在某些只需要這些類宣告,而不需要定義的地方(例如:自定義的標頭檔案中),就可以簡單的include這個標頭檔案。
然而,實踐是檢驗真理的唯一標準。 事實上,iosfwd標頭檔案也包含了一些摸板定義(摘自vs2013 版本iosfwd):
這裡可以看到,語言標準庫中的name經常是以_
打頭的,所以在造輪子的時候,最好不要定義以_
開始的名稱,以避免名字衝突。
iosfwd還包含了一些typedef。
也許很多開發者會覺得奇怪,為什麼自己使用iostream
類模版出現編譯錯誤的時候,錯誤資訊裡帶有的卻是basic_iostream
,完全看不到任何iostream字元。
哈哈,因為iostream類實際上基本類模版basic_iostream的例項化模版類(>-《讀起來是不是很拗口)。
stl使用了大量泛型程式設計,但是使用泛型程式設計的乙個缺點就是----類名會變得很長。例如,vector< map< string, ostream > >。 想想看,如果每次宣告物件的時候都要寫明這麼長乙個型別,那程式設計一定會變成一件很無聊的事。 這個時候typedef就非常有用了:
看,長長的型別名是不是一下子就變短了!
C 標頭檔案系列 array
注意,該標頭檔案僅在c 11中標準才開始出現。與語言內建的陣列一樣,array類模版支援幾乎所有內建陣列包含的特性 那既然與內建陣列一樣,為什麼還要定義這樣乙個模版呢?c 委員會是想造輪子嗎 當然不是!array模版類實際上是內建陣列的聚合,外加一層封裝。正是由於這層介面,才使得陣列能與stl接軌,...
C 標頭檔案系列 iterator
該標頭檔案圍繞迭代器展開,定義了一系列與迭代器有關的概念,但最最最重要的一點就是 它和其它容器一起實現了c 容器的iterator設計模式。上述文字摘自c 14標準草案,簡而言之,迭代器就是對指標的一層封裝,提供了統一的介面。使用迭代器有很多好處 詳細請見設計模式。迭代器主要有5類 iterator...
C 標頭檔案系列 iterator
該標頭檔案圍繞迭代器展開,定義了一系列與迭代器有關的概念,但最最最重要的一點就是 它和其它容器一起實現了c 容器的iterator設計模式。上述文字摘自c 14標準草案,簡而言之,迭代器就是對指標的一層封裝,提供了統一的介面。使用迭代器有很多好處 詳細請見設計模式。迭代器主要有5類 iterator...