C primer(第四版)讀書筆記5

2021-06-03 08:24:21 字數 2203 閱讀 3928

extern int i;    //declares but does not define i

int i      //declares and defines i

extern宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。

如果宣告有初始化式,那麼它可被當做是定義,即使宣告變數為extern:

extern double pi = 3.1416 //definition

只有當extern宣告位於函式外部時,才可以含有初始化式。

因為已初始化的extern宣告被當做是定義,所以該變數任何隨後的定義都是錯誤的:

extern double pi = 3.1416  //definition

double pi;                       //error:redefinition of pi

設計標頭檔案需要注意:標頭檔案所作的宣告在邏輯上應該是適於放在一起的。編譯標頭檔案需要一定時間。如果標頭檔案太大,程式設計師可能不願承受包含該標頭檔案所帶來的編譯時代價。

為了減少處理標頭檔案的編譯時間,有些c++實現支援預編譯標頭檔案  p58

常量在定以後不能修改,所以定義時比如初始化: p49

const int i=0;

在全域性作用域裡定義的非const變數時,它在整個程式中都可以訪問。

//file_1.cc

int counter; //definition

//file_2.cc

extern int counter;  //uses counter from file_1

++counter;  //increments counter defined in file_1

與其他變數不同,除非特別說明,在全域性作用域宣告的const變數是定義該物件的檔案的區域性變數。此變數只存在於那個檔案中,不能被其他檔案訪問。

通過指定const變數為extern,就可以在整個程式中訪問const物件,就可以在整個程式中訪問const物件:

//file_1.cc

extern const int bufsize=fcn();

//file_2.cc

extern const int bufsize; //uses bufsize from file_1

for (int index=0;index != bufsize;++index)

//...

本程式,file_1.cc通過函式fcn()返回值來定義和初始化bufsize。而bufsize定義為extern,也就意味著bufsize可以在其他檔案中使用

what enum:定義了整數常量集合(與const不同,它把相同概念的常量分為乙個組)

how 定義enum以及enum成員:

預設地,第乙個列舉成員賦值為0,後面每個列舉成員賦值的值比前面大1

可以為乙個或多個列舉成員提供初始值,

用來初始化列舉成員的值必須是乙個常量表示式

enum forms; //shape=1,sphere=2,cylinder=3,polygon=4

在列舉型別forms中,顯示將shape賦值為1,其他列舉成員隱式初始化

enum points; //point2d=2,point2w=3,point3d=3,point3d=4

不能改變列舉成員的值。列舉成員本身就是乙個常量表示式,所以也可用於需要常量表示式的任何地方

每個enum都定義了一種新的型別。列舉型別物件的初始化或賦值,只能通過其列舉成員或同一列舉型別的其他物件來進行

points pt3d=point3d; //ok

points pt2w=3;        //error

注意:把3賦值給points物件是非法的,即使3與乙個points列舉成員相關聯

c++自動將列舉型別的物件或列舉成員轉換為整型,其轉換結果可用於任何要求使用整數值的地方。  

將enum物件或列舉成員提公升為什麼型別由機器定義,並且依賴於列舉成員最大值。但至少提公升為int型。  p157

在使用有列舉型別形參的過載函式時,請記住:由於不同列舉型別的列舉常量值不相同,在函式過載確定過程中,不同的列舉型別會具有完全不同的行為。其列舉成員決定了它們提公升的型別,而所提公升的型別依賴於機器。 p235

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中文版第四版 讀書筆記

2011.8.10 p46 只有當extern 宣告位於函式外部時,才可以含有初始化式。extern double pi 3.1416 pi 是乙個全域性變數,這是乙個定義 p50 在全域性作用域宣告的const 變數是定義該物件的檔案的區域性變數 僅作用在該檔案中 要使 const 變數能夠在其他...

C Primer 第四版讀書筆記(五)之語句

通常情況下,語句是順序執行的。但是,除了最簡單的程式外,只有順序執行往往並不足夠。為此,c 定義了一組控制流語句,允許有條件地執行或者重複地執行某部分功能。1.1 簡單語句 c 中,大多數語句以分號結束。表示式語句用於計算表示式。1.2 宣告語句 在c 中,物件或類的定義或宣告也是語句。1.3 復合...