本博客為閱讀《C++ Primer》(第5版)的讀書筆記
ps:剛開始的時候我將所有的筆記都放在一篇博客中,等看到第六章的時候發現實在是太多了,導致我自己都不想看,為了日后回顧(不那么有心理壓力),我將筆記拆分為一章一章的。
- 在大多數系統中,
main
的返回值被用來指示狀態。返回值0表示成功,非0的返回值的含義由系統定義,通常用來指出錯誤類型。在Unix
中程序運行以后返回值保存在$?
中(必須在剛運行后打印輸出) - 編譯時可能需要加上
-std=c++11
打開對C++11標準的支持,一般會加上-Wall
參數,可以對有問題的程序結構發出警告 - 如果想要通過打印語句進行調試,一定要及時使用
endl
操縱符刷新流,否則如果程序崩潰,可能無法得到輸出信息,從而導致關于程序崩潰位置的錯誤推斷 - 標準庫定義的所有名字都在命名空間std中
/*
和*/
之間不能包含*/
,可以包含/*
和//
- 當我們使用一個
istream
對象作為條件時,其效果是檢測流的狀態。如果流是有效的(未遇到錯誤)檢測成功,當遇到文件結束符(end-of-file
),或遇到一個無效輸入時,istream
對象的狀態會變為無效,返回假 - 在
Unix
系統中,文件結束符為Ctrl+D
- 按照編譯錯誤報告的順序來逐個修正錯誤,因為錯誤經常有傳遞效應,后面的錯誤經常是由前面的錯誤引起的。在每修改一個(或一小部分)明顯的錯誤后就重新編譯
- 用
cin
進行循環讀入的格式為while(cin>>x)
。但是如果用Ctrl+C
中斷讀入會導致cin
失效 - 對
cin
和scanf
的輸入速率進行了測試,一般情況下cin
比scanf
慢許多,在讀入規模在1e6
規模就會有明顯的差距。但是可以用ios::sync_with_stdio(false);
加速流,這樣會關閉和stdio
的同步,在網上查了一下,這就要求我們在混用cout
和printf
的時候都要及時清空緩沖區(輸出endl
或者\n
),問題不大。在加速流以后,cin
和scanf
的效率差不多,在1e8
數量級的時候cin
的效率超過了printf
(實測) - 注意判等運算符為
==
,為了避免寫成=
出錯,一個良好的編程習慣是常量 == 變量
,這樣如果我們寫錯了就會報錯 - 標準頭文件一般不加后綴,包含來自標準庫的頭文件時,應該使用
<>
包圍頭文件,對于不屬于標準庫的頭文件,則用""
包圍 - 為了使用一個類,我們不必關心它是如何實現的,只需要知道類對象可以執行什么操作
- 點運算符
.
的運算結果是右側運算對象指定的成員,調用運算符()
里面放置參數列表。 - 緩沖區是一個存儲區域,用于保存數據。IO設施通常將輸入(輸出)數據保存在一個緩沖區中,讀寫緩沖區的動作與程序中的動作是無關的。我們可以顯式地刷新緩沖區,以便強制將緩沖區中的數據寫入輸出設備。默認情況下,讀
cin
會刷新cout
,程序非正常終止也會刷新cout
- 類類型的變量如果未指定初值,則按類定義指定的方式進行初始化。定義在函數內部的內置類型變量默認是不初始化的,除非有顯式的初始化語句