21. 函數返回非引用類型和引用類型時:
返回非引用類型: 調用複製構造函數
返回引用類型: 不調用複製構造函數
函數返回在表達式中,編譯器會自動創建一個無命名的臨時變量,將返回值賦給它。
22. 默認實參如果有一個形參爲默認實參,那麼後面的形參都必須又默認實參。
函數調用的實參按位置解析,默認實參只能用來替換函數調用缺少的尾部實參。
23.千萬不要返回局部對象的引用。
千萬不要返回指向局部對象的指針。
24. 默認實參初始化式可以是任何適當類型的表達式,如:int screenInit(int height = screenHeight());
25. 既可以在聲明中指定默認實參,也可以在定義中。但在一個文件中,只能指定默認實參一次。
26. 靜態局部對象在程序結束前不會消失。如:
void f()
{
static int x = 5;
}
但是變量的作業域沒有變。
27. 內聯函數主要用於解決小型函數的調用耗時問題。
內聯函數可以放在頭文件中定義。
28. 編譯器隱式地將類定義中的成員函數作爲內聯函數。
如:
class a {
public:
void print()
{
std::cout << "Hello, world!" << std::endl;
}
int add(int t1, int t2);
}
類a的定義中print函數將自動作爲內聯函數展開,add函數不是內聯函數,它的具體定義在類定義體中。
29. 類的每個成員函數都隱含了一個額外的this形參。如:上面的add中(a* const this, int t1, int t2)。
在成員函數後面的const作用爲定義了這樣的this指針:
const a* const this。即指向a類型的const指針,該指針值也是不可變的。所以this指針不能改變對象內變量值。
注: const對象的指針只能調用其const成員函數,如調用非const成員函數則會報錯。
30. 構造函數可以重載
無形參的構造函數爲默認構造函數。
在類中無顯式定義任何構造函數,則編譯器將自動合成默認構造函數。
若調用合成默認構造函數時,在類的初始化時,若類對象爲全局變量,則內建類型初始化爲0,否則爲局部變量時內建類型未初始化。