1. 程式人生 > >C++primer讀書筆記(一)

C++primer讀書筆記(一)

1.endl操縱符
  效果:結束當前行,並將與裝置關聯的緩衝區(buffer)中的內容刷到裝置中。緩衝重新整理操作可以保證到目前為止程式所產生的所有輸出都真正寫入輸出流中,而不是僅停留在記憶體中等待寫入輸入流。
//在除錯時新增列印語句,這類語句應該保證“一直”重新整理流。否則程式崩潰是輸出可能還停留在緩衝區中,從而導致程式崩潰位置的判斷錯誤。

2.::作用域運算子

3.註釋界定符不能巢狀
註釋掉包含界定符對形式註釋的程式碼時,應該用單行註釋方式註釋掉程式碼段的每一行。

4.讀取數量不定的輸入資料
while (std::cin >> value) {
        sum += value;
    }
[注]:實際輸入時當遇到檔案結束符,或無效輸入時,while條件為假,退出迴圈。
Windows系統的檔案結束符:Ctrl+Z,再按Enter

5.不屬於標註庫的標頭檔案,用""包含

6.使用檔案重定向
取代在dos視窗下大量的輸入引數
專案-屬性-命令引數
$ addItems <infile>outfile

7.cout/cerr/clog【參考了另一個部落格】
  cout經過緩衝後輸出,預設情況下是顯示器 。這是一個被緩衝的輸出,是標準輸出,並且可以重新定向
  cerr不經過緩衝而直接輸出,一般用於迅速輸出出錯資訊,是標準錯誤,預設情況下被關聯到標準輸出流,但它不被緩衝,也就說錯誤訊息可以直接傳送到顯示器,而無需等到緩衝區或者新的換行符時,才被顯示。一般情況下不被重定向
 /*   對於為什麼有cerr和clog
  比如,你的程式遇到呼叫棧用完了的威脅(無限,沒有出口的遞迴)。你說,你到什麼地方借記憶體,存放你的錯誤資訊?所以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支援。緩衝區的目的,就是減少刷屏的次數——比如,你的程式輸出聖經中的一篇文章。不帶緩衝的話,就會每寫一個字母,就輸出一個字母,然後刷屏。有了緩衝,你將看到若干句子“同時”就出現在了螢幕上(由記憶體翻新到視訊記憶體,然後重新整理螢幕)。*/

8.資料型別
int/short/long/long long都屬於帶符號的,通過新增unsigned得到無符號型別
char型別分為char、unsigned char、signed char //其中char表現為有符號或無符號中的一,具體是哪種由編譯器決定。

9.選擇資料型別的準則(儘可能接近硬體)
 a.當明確知曉數值不可能為負時,選用無符號型別
 b.使用int進行整數運算。實際應用中short常顯的太小而long一般和int有一樣的尺寸。如果數值超過int範圍,選用long long
 c.在算數表達中不使用char或bool,只有正在存放字元或布林值時才使用他們。因為char型別在一些機器上是有符號的,而在另一些機器上是無符號的,所以使用char進行運算容易出問題。如果需要使用一個不大的整數,那麼明確指定它的型別是char或者unsuigned char;
 d.執行浮點運算選用double,這是因為float通常精度不夠而且雙精度浮點和單精度浮點數的計算代價相差無幾。甚至對於某些機器而言double比float運算還快。long double 提供的精度在一般情況下是沒有必要的,況且它帶來的執行時消耗也不容忽視。