一、C++的I/O對C的發展—類型安全和可擴展性
C語言中I/O存在問題:
1、在C語言中,用prinff和scanf進行輸入輸出,往往不能保證所輸入輸出的數據是可靠的、安全的。學過C語言的讀者可以分析下面的用法:想用格式符%d輸出一個整數,但不小心錯用了它輸出單精度變量和字符串,會出現什么情況?假定所用的系統int型占兩個字節。
printf(“%d”,i); //i為整型變量,正確,輸出i的值
printf(“%d”,f); //f為單精度變量,輸出變量中前兩個字節的內容
printf(“%d”,”C++”);//輸出字符串”C++”的起始地址
2、在用scanf輸入時,有時出現的問題是很隱蔽的。如
scanf(“%d”,&i); //正確,輸入一個整數,賦給整型變量i
scanf(“%d”,i); //漏寫&
假如已有聲明語句”int i=1”,定義i為整型變量,其初值為1。編譯系統不認為上面的scanf語句出錯,而是將輸入的值存放到地址為000001的內存單元中,這個錯誤可能產生嚴重的后果。
3、用printf和scanf可以輸出和輸入標準類型(如:int,float,double,char)的數據,但無法輸出用戶自己聲明的類型(如數組、結構體、類)的數據。在C++中,會經常遇到對類對象的輸入輸出,顯然無法使用printf和scanf來處理。C++的I/O操作是可擴展的,不僅可以用來輸入輸出標準類型的數據,也可以用于用戶自定義類型的數據。C++對標準類型的數據和對用戶聲明類型數據的輸入輸出,采用同樣的方法處理。顯然,在用戶聲明了一個新類后,是無法用printf和scanf函數直接輸出和輸入這個類的對象的。
解決辦法:
可擴展性是C++輸入輸出的重要特點之一,它能提高軟件的重用性,加快軟件的開發過程。
C++通過I/O類庫來實現豐富的I/0功能。這樣使C++的輸入輸出明顯地優于C語言中的pfintf和scanf,但 是也為之付出了代價,C++的I/O系統變得比較復雜,要掌握許多細節。
http://blog.csdn.net/yunwu_gfalisa/article/details/53590547