隨著計算機語言的發展,我們現在編寫一個程序越來越輕易了。利用一些軟件開發工具,往往只要通過鼠標的拖拖點點,計算機就會自動幫你生成許多代碼。但在很多時候,計算機的這種能力被濫用了,我們往往只考慮把這個程序搭起來,而不去考慮程序的性能如何,程序是否足夠的健壯。 而此節課的目的主要是介紹一些編碼的經驗,讓大家編寫的程序更加健壯和高性能?! ?STRONG>1、PRefer const and inline to #define
第三,define的使用很輕易造成污染。比如,假如有兩個頭文件都定義了ASPECT_RATIO, 而一個CPP文件又同時包含了這兩個頭文件,那么就會造成沖突。更難查的是另外一種錯誤,比如有如下的代碼: // in header file def.h #define Apple 1 #define Orange 2 #define Pineapple 3 … // in some cpp file that includes the def.h enum Colors {White, Black, Purple, Orange}; 在.h文件中Orange被定義成水果的一種,而在.cpp文件中Orange又成為了一種顏色,那么編譯器就會把此處的Orange替換成2,編譯可能仍然可以通過,程序也能夠運行,但是這就成了一個bug,表現出古怪的錯誤,且很難查錯。再比如定義了一個求a與b哪個數大的宏,#define max(a,b) ((a) > (b) ? (a) : (b)) int a = 5, b = 0; max(++ a, b); max(++ a, b + 10); 在上面的操作中,max(++ a, b); 語句中a被++了兩次,而max(++ a, b + 10); 語句中a只加了一次,這樣在程序處理中就很有可能成為一個bug,且此bug也非常的難找。在實際編碼時可以使用如下的語句來做: template<class T> inline const T& max(const T& a, const T& b) { return a > b ? a : b; } 2、Prefer C++-style casts
要想找出那20%的代碼,我們的方法就是使用Profiler,它實際上是一些公司所開發的工具,可以檢查程序中各個模塊所分配內存的使用情況,以及每個函數所運行的時間等。常見的Profiler有Intel公司開發的VTune,微軟公司開發的Visual Studio profiler,DevPartner from Compuware等。 更多內容請看C/C++技術專題 C/C++進階技術文檔 C/C++相關文章專題,或