在查看相關資料後,收獲頗豐,對於我這樣的C++小民來說,這些東西簡直是太有用了!
1、main函數的使用
對於C++而言,采用標准的int main()或者int main(int argc,char *argv[])很有必要,雖然有些不規范的形式在VC++6.0等裡也會支持,但是要跨平台運行時,可能就會出現問題,不要到時懷疑C++的跨平台性哦!
2、良好的運算符習慣
曾經我經常寫下這樣的語句if(a=0),那時總找不到錯,經常問老師,現在雖然不會了。可是有時打字快了的時候我也會犯下這樣的錯誤,一個好的習慣就是將它改為if(0==a),這樣的話哪怕打字打快了,編譯器也不會通過if(0=a)這樣的錯誤語句。
3、表達式不吝啬括號
本人曾經寫下這樣的語句if(a&b==c),我本以為是if((a&b)==c)。但其實計算機並不這樣想,它認為是if(a&(b==c)),究其原因,還是自己過於相信已經知道運算符的優先級。當然了,有很多其它類似的例子也是出現這種不應該的錯誤,一個好的習慣就是用括號將自己的意圖表達出來!
4、評估求值順序莫亂
當我知道這麼一回事時,不得不驚歎原來還有這麼一說!如果我們曾寫下a=F1()+F2()*F3()這樣的語句,計算機不能保證F2()一定就比F3()先運算,如果F2()裡有某些變量是與F3()共用的,那就會產生一些很隱蔽的錯誤了。不要依賴於計算順序,用顯示的方法將其順序固定,如int tmp1=F2()、int tmp2=F3()、a=F1()+F2()*F3(),這樣就指定了計算順序為F2()→F3()→F1()。
5、宏陷阱
剛學C++的時候,老師給我們講了#define sub(a,b) a-b這個經典的例子,當時沒怎麼注意裡面包含的陷阱,如今有所體會了。如果定義的宏遇上了c*sub(a,b),字符展開為c*a-b,顯然背離了我們的初衷。此類的問題還有許多,究其原因,大多都是宏的替代機制引起的。下面記錄一些建議以供參考,①使用完備的括號②參數盡量不變化③用括號將宏定義的表達式總括。
6、防范內存溢出
最近經常遇上數組越界的問題,致使內存釋放時出問題。很顯然,內存溢出的危害很大,在進行相關的數據處理時,特別要小心邊界數據的問題,同時也要注意未經初始化或失效後沒置NULL的指針。
摘自 自習室