C++編程最佳化心得(持續更新)

來源:互聯網
上載者:User

標籤:資料   bug   注釋   對象   拷貝   依賴   絕對路徑   中文編碼   純虛函數   

1. 對齊原則。比如64位匯流排,每次定址讀取8B。編程時注意變數地址,盡量消耗匯流排最少的定址次數。堆記憶體申請時,系統嚴格按照對齊原則分配,故而使用時候也盡量不要跨定址邊界。

2. 需要的時候,可為了效率拷貝代碼,雖然增加了代碼體積,但這是值得的。尤其是for迴圈,若次數比較少,拆開亦無妨。

3. 位元運算中,-1右移,左邊補1,故仍為-1;-1左移,右邊補0,故不再為-1。

4. 每次申請的堆記憶體,最好初始化,裡面是垃圾資料,而並非為空白。

5. 項目開發中,往往一個引擎對外暴露的是一個純虛類,而其介面就是這個類的**指標變數。

6. 程式邏輯,重在語義。不能為代碼的過分簡單而減少函數的設計。

7. *&表示對指標的引用。

8. 類的靜態方法不可調用其非靜態方法,亦不可調用非靜態成員變數。

9. 多檔案編程時,標頭檔不可相互包含。

10. 標頭檔裡盡量不要使用using namespace std;

11. static成員定義要放在cpp檔案裡面,而不是標頭檔裡。

12. 純虛類盡量不要延續兩層以上。

13. include引用盡量都放在cpp檔案裡。

14. 子類繼承父類,不可在建構函式裡初始化父類並未在建構函式裡初始化的成員,也就是說,子類建構函式裡能初始化的成員,只有自己本身的和父類建構函式裡的。

15. 項目開發中,對於一些依賴本地環境的參數,要寫專門的設定檔,比如伺服器位址。

16. 標頭檔裡只聲明,不定義。在標頭檔中,全域變數聲明,必須加extern修飾;靜態成員變數聲明放在標頭檔,定義放在cpp檔案,若是普通靜態變數,最好聲明和定義放在cpp,因為static範圍限於單檔案,放在cpp裡只對本檔案可見,放在標頭檔會被所有引用該標頭檔的cpp拷貝一份完全相同的變數。

17. linux下,進行檔案操作時,檔案路徑要採用絕對路徑(相對路徑很多時候會出bug),檔案指標要對其傳回值作判斷,防止null 指標。

18. debug狀態下使用assert是極好的,不過記得發布版本前在#include <cassert>前加上#define NDEBUG,assert語句會被NDEBUG所影響。這裡多嘴一句,錯誤與異常是不同的,異常是不可避免,在發布版本裡不可或缺的,故而assert不能用於處理異常。註:在加上#define NDEBUG後,不論是調試還是運行,assert語句都會被直接忽略,故而平時開發時把#define NDEBUG注釋掉,發布時再啟用它。

19. 物件導向編程:可維護,可複用,可擴充,靈活性好。

20. 頻繁使用的代碼裡,盡量少使用容器,因為其建立和回收的開銷很大。

21. 字串拼接效率:經過測試(http://bbs.csdn.net/topics/360000434和我自己項目中的實驗),memcpy效率最高,string類的+=效率特別高,足以滿足日常所需,而strcat效率很差,append也不快。

22. 基類中的虛函數要麼實現,要麼是純虛函數(絕對不允許聲明不實現,也不純虛)。

23. 在C++的類中,普通成員函數不能作為pthread_create的線程函數,如果要作為pthread_create中的線程函數,必須是static。

24. 當多個線程訪問同一個類靜態方法時,若該方法裡只操作棧上資料,則無妨,因為線程的棧是獨立的;若該方法操作了非棧上的資料(比如堆、全域變數等),則需要互斥鎖。

25. 內嵌函式,定義體要放在標頭檔,以保證每一個引用該標頭檔的cpp裡都是完全相同的拷貝;inline關鍵字置於定義前,不必放在聲明前;若定義在類內部,可不需要inline關鍵字。

26. vector執行clear時,會自動調用元素(如果是類的話)的解構函式。

27. 編程時,對變數(尤其是全域性質的變數或類)命名,要用解釋性的,而不能用隨意的j1,i1,n,m等名稱,容易與庫裡的變數衝突。

28. 定義宏時,盡量多用整數,少用-1,-2之類,容易受uint和int不統一帶來的困擾。

29. 函數形參採用預設值時,要寫在聲明裡,而不寫定義裡,這樣方便調用其標頭檔的cpp看得到預設值。

31. utf-8 中文編碼 三個位元組表示一個漢字

32. 項目開發時,使用條件編譯:

#define DEBUGmain(){#ifdef DEBUG    printf("Debugging\n");#else    printf("Not debugging\n");#endif    printf("Running\n");}

發布版本時,注釋掉第一行。這種方式要比開大量注釋來得方便。

 

C++編程最佳化心得(持續更新)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.