C++ Primer 筆記——輸入輸出
阿新 • • 發佈:2017-07-23
vs2015 insert image code 不同的 cal 調用 base cdecl
1.C++語言並未定義任何輸入輸出語句,取而代之,包含了一個全面的標準庫來提供IO機制。
由上圖能夠知道,I/O操作的基類是ios_base,各個類的用途例如以下:
- <iostream>
- istream 從流中讀取數據
- ostream 向流中寫數據
- iostream 對流進行讀寫操作。派生於istream和ostream
- <fstream>
- ifstream 從文件裏讀取數據。派生於istream
- ofstream 向文件裏寫數據,派生於ostream
- fstream 讀寫文件, 派生於iostream
- <sstream>
- istringstream 讀取string對象。派生於istream
- ostringstream 寫string對象。派生於ostream
- stringstream 讀寫string對象,派生於iostream
2.C與C++處理輸入輸出的方式不同,我們從C語言的輸入輸出可以很明顯看出是函數調用方式,而C++的則是對象模式,iostream類是派生於ostream類和istream類,而cout和cin是ostream類和istream類的對象。
3. std::endl 實質上是一個函數,它做了兩件事情:輸出一個 ‘\n‘ 並刷新緩沖區。
// VS2015編譯器上的定義 // MANIPULATORS template<class _Elem, class _Traits> inline basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr) { // insert newline and flush stream _Ostr.put(_Ostr.widen(‘\n‘)); _Ostr.flush(); return (_Ostr); }
// 以下三個語句是等價的 std::cout << std::endl; std::cout << &std::endl; std::cout << ‘\n‘ << std::flush;
4.因為系統在空閑的時候會不停的檢查緩沖區,如果發現新內容,將刷新緩沖區,這也是為什麽我們不用std::endl或std::flush時也可以正常輸出的原因。
5.當從鍵盤向程序輸入數據時,對於如何指出文件結束,不同操作系統有不同的約定。在Windows系統中,輸入文件結束符的方法是Ctrl + Z,然後按Enter或Return鍵。在UNIX系統中,包括Mac OS X系統中,文件結束符輸入是用Ctrl+D。
6.我們在輸入的過程中,可以用一些std::cin的函數來判斷輸入的結果是否正確。
// 以下返回都是bool值 std::cin.bad(); // 輸入流出現致命性錯誤,不可挽回 std::cin.fail(); // 輸入流出現非致命性錯誤,可挽回 std::cin.eof(); // 輸入流出到達文件結尾 std::cin.good(); // 輸入流完全正常
C++ Primer 筆記——輸入輸出