C++88個注意點子之21~30

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,否則爲局部變量時內建類型未初始化。






發佈了65 篇原創文章 · 獲贊 75 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章