讓自己習慣c++
條款1:視c++為乙個語言聯邦
c++可以看作是四種次語言組成的:
c(包括區塊、語句、預處理器、內建資料型別、陣列、指標等);
object-oriented c++(主要表現c++的面對物件的性質,包括類、封裝、繼承、多型性、virtual函式等);
template c++(為c++泛型程式設計部分);
stl(是模版程式庫,主要包括容器、迭代器、演算法以及函式物件)。
條款2:盡量以const, enum, inline替換 #define(實用編譯器代替預編譯器)
問題:#define定義的巨集不被視為語言的一部分,而其定義的記號名稱也許沒有進入記號表被編譯器看到,追蹤巨集定義較麻煩。
解決方案:以常量替換#define(使用const關鍵字)
const double* cptr;//指向const物件的指標,不能通過該指標改變所指向位址的值,但可以改變指標所指的位址值,定義時不用初始化
double* const cptr;//const指標,指標的值無法改變,定義時必須初始化。
在實際程式中指向const的指標常用作函式的形參,可用於防止函式對形參進行修改。
特殊情況:1、在標頭檔案中定義指向const char*(c風格字串)的常量指標時應寫兩次const(此時用string更合適)
const char* const anthorname="scott meyer";
const std::string authorname("scott meyer");
2、定義類內專屬常量時為保證只有乙份實體需定義為static成員(此時體現了#define不具有封裝性)
如果在class編譯期間需要給class專屬的常量值賦初值,但是舊式編譯器不允許class成員在其宣告式上獲得初值,此時應採用「the enum hack」做法。其理論基礎為:乙個屬於列舉型別的數可以權充int被使用。
static const int numturns = 5;
int score[numturns];
enum;
int score[numturns];
"enum hack"的優點在於其行為在某些方面比const像#define。我們無法獲得enum和#define的位址,但是我們可以獲得const的位址。enum可以實現這種約束。
對於形似函式的巨集,最好改用inline函式代替#define。
《effective C 》讀書筆記
1,c 關鍵字explicit c 中,乙個引數的 建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個 構造器,2 是個預設且隱含的型別轉換操作符 所以,有時候在我們寫下如 aaa 這樣的 且恰好 的型別正好是aaa單引數構造器的引數型別,這時候 編譯器就自動呼...
Effective C 讀書筆記
一 讓自己習慣c 1 條款01 視c 為聯邦語言 c 的組成可分為四部分 1.c c 仍然以c語言為基礎。區塊 語句 預處理 內建資料型別 陣列 指標等都來自c。2.object oriented c c with classes所訴說的 classes 包括構造和析構 封裝 繼承 多型 virtu...
讀書筆記 Effective C
部分條款過於深奧,部分條款已了然於心,僅記錄當下所識所學 對於常量巨集定義,最好用const代替 define 對於函式巨集定義,最好用inline代替 define include ifdef ifndef仍被需要 內建物件記得手動初始化 使用成員初始列替換賦值操作 以local static替換...