p50: 在全域性作用域宣告的const 變數是定義該物件的檔案的區域性變數(僅作用在該檔案中),要使 const 變數能夠在其他檔案中被訪問,必須顯示指定為extern。2011.8.10
p46: 只有當extern 宣告位於函式外部時,才可以含有初始化式。
extern double pi = 3.1416; //pi 是乙個全域性變數,這是乙個定義
引用就是物件的另乙個名字,主要用於函式的形式引數;不能定義引用型別的引用,但可以定義其他任何型別的引用。p56:c++中struct 與 class 的區別僅在於預設訪問級別,前者預設是public的,後者預設是private的。引用必須在定義時就進行初始化,且初始化後一直指向初繫結的物件。
const 引用可以用不同型別但相關的物件來初始化;也可以用右值進行初始化。
const int &r = 42; //用右值
double dval = 3.14;
const int &ri = dval; //用double 來初始化,這只適用於const的情況
p59:標頭檔案中不應含有變數或函式的定義,但有三個例外:
1. 標頭檔案中可以定義類p75:當string物件和字串字面值進行混合連線時,+ 操作符的左右運算元必須至少有乙個string型別的。2. const 物件,值在編譯時就已經知道的const物件
3.inline函式
p80:q: 標準庫vector如何(預設)初始化沒有定義任何建構函式的類型別?
a:這種情況下,標準庫仍產生乙個帶初始值的物件,這個物件的每個成員進行了值初始化容器與迭代器,暫時看成更高階的陣列和指標。。??
bitset<32> bv(1010101); //好吧,第一眼看錯了,1010101是十進位制
2011.8.11
如果陣列的元素型別是類型別,不管陣列在**定義都自動呼叫該類的預設建構函式進行初始化;
如果該類沒有預設建構函式,則必須為該陣列的元素提供顯式初始化。
乙個vector物件可以用另乙個vector物件直接初始化。
c++中提供一種void * 指標型別,它可以儲存任何型別物件的位址,不允許用void * 指標操縱它所指向的物件。
指標和引用的比較
定義引用時必須初始化;賦值行為的差異,給引用賦值是修改該引用所關聯的物件的值,給指標改值就使指標指向了不同的物件。
理解指向const 物件的指標和const 指標的不同含義。
不能使用void * 指標儲存const 物件的位址,而必須使用const void * 指標來儲存。
不能保證指向常量的指標所指物件的值一定不可修改。
p112:在typedef 中使用指標;const的位置不同會引起理解的偏差。
在堆heap中建立的動態陣列是沒有名字的,只能通過位址間接訪問堆中的物件。
2011.8.12
一般的陣列可以用初始化列表為陣列元素提供不相同的初值;
動態分配的陣列,其元素只能初始化為元素型別的預設值:
c++中允許定義類型別的const陣列,但該類型別必須提供預設建構函式。int * arr = new int[10](); //在g++中測試,()使每個元素初始化為0
不能用陣列直接初始化乙個陣列,但可以用陣列(還可以是其字首子集)來初始化乙個vector物件。
typedef int int_array[4]; //給乙個大小為4的int陣列取乙個別名為int_array
int_array * ip = ia;//用乙個二維陣列名ia初始化ip
2011.8.15
關係操作符不能串接使用,如 if(i位操作符使用整型的運算元,其操作的整型可以是有符號的和無符號的,位操作符如何處理符號位依賴於機器。
& | 異或,<< 左移。
使用復合賦值操作時,左運算元只計算了一次;而使用相應的長表示式時,該運算元計算了兩次。
對於++ 和--操作符,使用前置操作所要做的工作更少。
理解類似於 *iter++ 這樣的語句。
c++ 為什麼不叫做++c。
關於delete 和delete。
逗號表示式的值是其最右邊表示式的值。
在delete之後,最好將指標設為0、空、null。
const int * pci = new const int(1023); //動態建立乙個常量物件
delete pci; //在堆中建立的常量也是可以被**的
使用const_cast將轉換掉表示式的const性質。
求最大公約數——輾轉相除法
p201:文中說c語言中,具有const 形參或非const 形參的函式並無區別。//有待考證
千萬不能返回區域性變數的引用。
求最大公約數的遞迴版本p216。
內聯函式的定義必須在標頭檔案中。
編譯器隱式的將在類內定義的成員函式當作內聯函式。
為所有形參提供預設實參的建構函式也屬於預設建構函式,所以說預設建構函式的形參列表不一定為空。
類中的靜態成員函式不能被宣告為const,
靜態成員函式也不能被宣告為虛函式。
(待續)
c primer大綱(第四版)
第1章 快速入門 第一部分 基本語言 第2章 變數和基本型別 第3章 標準庫型別 第4章 陣列和指標 第5章 表示式 第6章 語句 第7章 函式 第8章 標準io庫 第二部分 容器和演算法 第9章 順序容器 第10章 關聯容器 第11章 泛型演算法 第三部分 類和資料抽象 第12章 類 第13章 複...
C primer(第四版)讀書筆記2
以下幾種情況都可能引發執行時或編譯時錯誤 1 delete不是new分配的空間 2 重複delete new分配的空間兩次以上 3 在釋放動態陣列時忘了方括號對 inti int pi i delete pi vs 2008 會執行時錯誤 string str dwarves delete str ...
C primer(第四版)讀書筆記5
extern int i declares but does not define i int i declares and defines i extern宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。如果宣告有初始化式,那麼它...