標籤:mac put alt 對象 檢查 class 內容 基類 檔案
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編譯器上的定義 // MANIPULATORStemplate<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 筆記——輸入輸出