stdio 是c標準庫裡面的函式庫 對應的基本都是標準輸入輸出等等c語言常用庫的定義iostream是c++標準庫的頭定義, 對應的基本上是c++的輸入輸出相關庫定義
開發c程式用stdio, c++用stdio/iostream 都可以。
c++時,推薦使用
#include
using namespace std;
盡量用而不用
是的,scanf和printf很輕巧,很高效,你也早就知道怎麼用它們,這我承認。但
儘管他們很有用,事實上scanf和printf及其系列還可以做些改進。尤其是,他們
不是型別安全的,而且沒有擴充套件性。因為型別安全和擴充套件性是c++的基石,所以你
也要服從這一點。另外,scanf/printf系列函式把要讀寫的變數和控制讀寫格式的
資訊分開來,就象古老的fortran那樣。是該向五十年代說訣別的時候了!
不必驚奇,scanf/printf的這些弱點正是操作符》和《的強項:
int i;
rational r;// r 是個有理數
...cin >> i >> r;
cout << i << r;
上面的**要通過編譯,>>和《必須是可以處理rational型別物件的過載函式(可
能要通過隱式型別轉換)。如果沒有實現這樣的函式,就會出錯(處理int不用這樣
做,因為它是標準用法)。另外,編譯器自己可以根據不同的變數型別選擇操作符
的不同形式,所以不必勞你去指定第乙個要讀寫的物件是int而第二個是rational
。另外,在傳遞讀和寫的物件時採用的語法形式相同,所以不必象scanf那樣死記一
些規定,比如如果沒有得到指標,必須加上位址符,而如果已經得到了指標,又要
確定不要加上位址符。這些完全可以交給c++編譯器去做。編譯器沒別的什麼事好
做的,而你卻不一樣。最後要注意的是,象int這樣的固定型別和象rational這樣
的自定義型別在讀寫時方式是一樣的。而你用sacnf和printf試試看!
你所寫的表示有理數的類的**可能象下面這樣:
class rational ;
ostream& operator<<(ostream& s, const rational& r)
上面的**涉及到operator《的一些微妙(但很重要)的用法,這在本書其他地方詳
細討論。例如:上面的operator《不是成員函式(條款19解釋了為什麼),而且,傳
遞給operator《的不是rational物件,而是定義為const的物件的引用(參見條款
22)。operator>>的宣告和實現也類似。
儘管我不大願意承認,可有些情況下回到那些經過證明而且正確的老路上去還是很
有意義的。第一,有些iostream的操作實現起來比相應的c stream效率要低,所以
不同的選擇會給你的程式有可能(雖然不一定,參見條款m16)帶來很大的不同。但
請牢記,這不是對所有的iostream而言,只是一些特殊的實現;參見條款m23。第
二,在標準化的過程中,iostream庫在底層做了很多修改(參見條款49),所以對那
些要求最大可移植性的應用程式來說,會發現不同的廠商遵循標準的程度也不同。
第三,iostream庫的類有建構函式而里的函式沒有,在某些涉及到靜態
物件初始化順序的時候,如果可以確認不會帶來隱患,用標準c庫會更簡單實用。
iostream庫的類和函式所提供的型別安全和可擴充套件性的價值遠遠超過你當初的想象
,所以不要僅僅因為你用慣了而捨棄它。畢竟,轉換到iostream後,你
也不會忘掉。
順便說一句,本條款的標題沒有列印錯;我確實說的是而非
。從技術上說,其實沒有這樣的東西——標準化委員會
在簡化非c標準標頭檔案時用取代了它。他們這樣做的原因在條款49進行
了解釋。還必須知道的是,如果編譯器同時支援 和,那
頭檔名的使用會很微妙。例如,如果使用了#include , 得到的是置
於名字空間std(見條款28)下的iostream庫的元素;如果使用#include
,得到的是置於全域性空間的同樣的元素。在全域性空間獲取元素會導致
名字衝突,而設計名字空間的初衷正是用來避免這種名字衝突的發生。還有,打字
時比少兩個字,這也是很多人用它的原因。:)
include和 include的區別
區別在於 如果用了,則一定要引入命名空間,即 using namespace std 如果用了,則不能引入命名空間,否則會引起編譯錯誤,提示找不到命名空間.例程如下 情況一 使用和命名空間 include using namespace std int main 輸出 need to use nam...
include 和 include 的區別
answer 1 include 會將指定檔案的內容插入到源程式檔案中。當使用的格式時,編譯器會從環境變數include所指定的路徑中尋找file name 檔案,如果沒有定義include,c 編譯器會在指定的路徑中搜尋檔案。如ht ide3000安裝後,預設include路徑是c ht ide3...
include和 include的區別
include是c 標頭檔案庫 include是c標頭檔案庫。c 有一部分繼承與c,所以c 中保留了iostream.h這種寫法。使用 include的時候,要在下邊加上using namespace std 例如 include using namespace std 使用 include,不需要...