##C++ Primer 學習筆記(第一章:開始)ios
[TOC]函數
Windows命令行下運行Visual Studio 編譯器:cl /EHsc prog1.cpp
,微軟編譯器會自動生成一個可執行文件prog1.exe
。學習
標準庫 4個IO對象:ui
cin(istream)
:標準輸入 cout(ostream)
:標準輸出 cerr(ostream)
:標準錯誤,輸出警告和錯誤信息 clog(ostream)
:輸出程序運行時的通常信息this
輸出運算符(<<
)和輸入運算符(>>
)的計算結果就是其左值運算對象。.net
寫入endl
結束當前行,並將與設備關聯的緩衝區(buffer
)刷到設備當中。命令行
註釋界定符(/**/
)繼承自C
語言。當註釋界定符跨越多行時,最好能顯式指出其內部的程序行都屬於多行註釋的一部分:code
/* * * */
註釋界定符不能嵌套,而單行註釋能夠忽略行內任何內容,包括界定符。對象
讀取不定量數據while(std::cin >> value)
檢測的是cin
,當使用一個istream
對象做爲條件時,效果是檢測流的狀態。當遇到一個文件結束符,或遇到一個無效輸入時(類型不符),則istream
對象的狀態會變爲無效。處於無效的istream
狀態會變假。blog
從鍵盤輸入文件結束符:(文件結束符並非回車)從鍵盤向程序指出文件結束,在Windows
系統中是Ctrl + Z
,而後按Enter
或Return
鍵。Unix
系統中是Ctrl + D
。
編譯器能夠查出的錯誤: 語法錯誤(syntax error
) 類型錯誤(type error
) 聲明錯誤(declaration error
):未聲明就使用或缺乏命名空間。
#include
包含來自標準庫的頭文件時,應該用尖括號(<>
)包含頭文件名。對於不屬於標準庫的頭文件,則用雙引號(""
)包圍。
while (cin >> …)
和while(!cin)
能用的緣由: 標準庫中:
/** * @brief The quick-and-easy status check. * * This allows you to write constructs such as * "if (!a_stream) ..." and "while (a_stream) ..." */ operator void*() const { return this->fail() ? 0 : const_cast<basic_ios*>(this); } bool operator!() const { return this->fail(); }
函數在while(cin)
或是if(cin)
時被調用,將流對象轉換成void *
類型。 bool operator!() const
函數在while(!cin)
或是if(!cin)
時被調用,將流對象轉換成bool
類型。 C++
中有特殊的兩個操做符能夠重載,分別是void*
和!
,即operator void*()
和bool operator!()
。 總結:一個對象a
,對於!a
操做,若是對象重載了!
操做符,則執行重載操做函數,不然先判斷是否重載了強制轉換操做符(void*)
,並執行強制轉換操做符,不然判斷是否能直接轉換爲bool
類型。 (總結摘自CSDN博客)
Windows cmd
下命令行使用文件重定向: 即xx.exe < (數據輸入文件)
或xx.exe < (數據輸入文件) > (輸出文件)