高質量C/C++編譯指南 學習筆記

1、添加

     #ifndef _XXX_H_
     #define _XXX_H_
     .....
     #endif

至頭文件,防止頭文件被重複引用而引起的重定義問題
2、#include<XXX.h>將從標準庫目錄開始搜索
#include"XXX.h"是從用戶工作目錄開始搜索
3、浮點數與0值比較:
無論float還是double變量,都有精度限制,不能直接用‘=’或者‘!=’來與數字比較,應該設法轉化爲“>=”或者“<=”形式。
eg:

    if((x>=-EPSION) && (x<=EPSION))   
         //EPSION是精度,一般取0.000001

4、const與#define比較
C++語言可以用const來定義常量,也可以用#define來定義常量,但是前者有更多的優點
i、const有數據類型,編譯器可以對其進行類型安全檢查;#define沒有數據類型,只是在編譯時進行符號替換,因此也沒有數據類型安全檢查
ii、有些集成化的調試工具可以對const常量進行調試,但是不能對宏常量進行調試
5、如果參數是指針,且僅作輸入時使用,則應該類型前加上const,防止該指針在函數體內被隨意修改
6、如果函數輸入參數以值傳遞方式傳遞對象,則宜改爲“const &”方式來傳遞,這樣可以省去臨時對象的構造與析構過程,從而提高效率
7、防止內存耗盡
i、判斷指針爲空,則馬上return來終止函數:

 void fun(void){
    A *a = new A();
    if(a==nullptr)return;       
}

ii、判斷指針爲空,則馬上調用exit(1)來終止整個程序運行

void fun(void){
    A *a = new A();
    if(a==nullptr)exit(1);
}

8、重載、覆蓋與隱藏
i、成員函數被重載的特徵:

  • 相同的範圍(在同一個類中)
  • 函數名字相同
  • 參數類型或(和)者個數不同
  • virtual關鍵字可有可無

ii、成員函數被覆蓋的特徵

  • 不同的範圍(分別位於派生類與基類)
  • 函數的名字形同
  • 參數形同
  • 基類必須有virtual關鍵字

iii、隱藏規則

  • 如果派生類的函數與積累的函數同名,但參數不同,此時,無論有無virtual關鍵字,基類的函數將被隱藏
  • 如果派生類的函數與基類函數同名,且參數也相同,但是基類沒有virtual關鍵字,基類的函數將被隱藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章