第三章 C++中的C
1. .hxx .hpp也是C++標頭檔
2.寫可移植的C++程式:用C++標準庫,和盡量使用符合POSIX標準的函數
3.標頭檔<climits>和<cfloat>中定義了不同基礎資料型別 (Elementary Data Type)可能儲存的最大值和最小值
4.sizeof 是一個運算子 不是函數, 如果對一個變數使用它,可以不要括弧: int i = sizeof i;
5.同類型指標相減,其結果是兩個指標之間相隔元素的個數
6.把變數和運算式轉換成字串:在一個前置處理器宏中的參數前加一個#,前置處理器會把這個參數轉換為一個字元數組
#define P(A) cout<< #A <<": result" << A << endl;
7.## 標誌粘貼:它允許設兩個標識符並把它們粘貼在一起自動產生一個新的標識符。
#deifine FIELD(a) char * a##_string;
FIELD(my); ===> char* my_string;
第五章 隱藏實現
1.友元
class My{
public:
friend void g();//友元:全域函數
friend class z;//友元:類
friend Y::fun();//友元:其它類的成員函數
}
2.友元是可以嵌套的
第七章 函數重載與預設參數
1.union(聯合)可以帶有建構函式、解構函式、成員函數甚至存取控制,但它不能在繼承時做基類使用
2.沒有類型名和標識符的union叫匿名聯合
int main(){
union{
int i;
float f;
};
i=12; f = 1.0;
}
第八章 常量
1.臨時變數按引用傳遞給一個函數時,這個函數的參數必須是const引用
class X{};
X fun()(return X();}
void g1(X&){}
void g2(const X&){}
main(){
g1( fun() );//This line will cause build error : const temporary created by fun()
g2( fun() );
}
2.類的const執行個體對象只能調用const成員函數。類的非const執行個體對象,可調用const和非const成員函數 但會優先調用非const成員函數。
第十章 名字空間
1.靜態對象的構造和解構函式
全域變數、對象的建構函式在main()之前被調用,且儲存空間分配在靜態儲存區
所有靜態對象無論是全域還是局部,它的解構函式都在main()之後被調用
如果一個包含局部靜態對象的函數從未被調用過,那麼這個對象的建構函式也不會被執行
2.內部串連
在檔案範圍內,一個被明確聲明為static的對象或函數是內部串連的
內部串連的一個好處是這個名字可以放在一個標頭檔中而不用擔心串連時發生衝突。
那些通常入在標頭檔裡的名字。如常量、內嵌函式、在預設情況下都是內部串連的(當然常量只在C++中預設為是內部串連,在C中外部串連)
3.namesapce可以有別名。一個namespace可以在多個標頭檔中用一個標識符來定義,從而往namespace中新增內容