C++——編程常見錯誤


C++庫函數程序員

C++標準庫比C標準庫要複雜不少,須要你們認真學習。C++標準庫創建時間較晚,解決了C標準庫的一些問題。經過認真學習、熟練掌握會對代碼質量的提升有必定幫助。數組

一些建議:
1. 儘可能使用迭代器代替下標操做
2. 儘可能避免使用指針和數組 ,儘量使用vector和迭代器
3. 採用 string 類型取代 C 風格字符串(使用標準庫類型 string,除了加強安全性外,效率也提升了,所以應該儘可能避免使用 C 風格字符串)
4. 用指針操做數組時應首先選用相似於迭代器的那種用法
5. const使用時,若是等價,儘可能將const放在類型後,以免相似於typedef使用中的錯誤
6. 通常而言,應該優先使用標準庫抽象類而少用語言內置的低級數組和指針。尤爲是應該使用 string 類型取代 C 風格以空字符結束的字符數組。現代 C++ 程序不該使用 C 風格字符串。安全


下面是一些在咱們程序中發現的錯誤:ide

1. 不會用 iterator(其實就是沒用過STL);
for (iter=v.begin; iter!=v.end(); iter++) {
...
}
if (iter == v.end()) {
}
(漏掉iter == v.end()的判斷,直接使用*iter。致使死機。安徽與寧夏出現過,非標準寫法的EPG引起。)函數

2. 多繼承時使用reinterpret_cast<>轉換。 (Hippo中出現過。死機。)學習

3. override函數時參數不一致致使被認做兩個不一樣的函數。(Hippo中出現過致使mp對象創建失敗,視頻沒法播放。)指針

 


不嚴謹的習慣,寫程序不留心環境、上下文code

1. getString只傳buffer指針,不傳buffer大小。
示例:int sysNtvuserGet(char *buf);
點評:在咱們程序員的心中總隱藏着一些約定、爲程序限定工做場景。要知道需求會變的,記憶會被淡忘的,隱藏在心裏的約定是不方便和其餘同事交流的。因此要牢記——不要給程序作隱式的限制,全部的限定必須直觀,必須落到代碼上、文字上。
修正:int sysNtvuserGet(char *buf, int bufLength);視頻

2. 寫程序隨意性大,不與代碼上下關聯思考
示例1:if (!strncmp("PVR.Schedule.get", buff, 15)) {
do something ;
} else if () {
。。。。。。
A large number of code
。。。。。。
} else if (!strncmp("PVR.Schedule.getByID", buff, 19)) {
never do here.
}
點評:不整理,不歸類,代碼可讀性差,問題越藏越深,不易發現對象

示例2:char LogUploadInterval_buf[URL_LEN] = {0};
memset(LogUploadInterval_buf, 0, URL_LEN);
sprintf(LogUploadInterval_buf,"%d",XXX);
點評:一個buffer居然被清了三次0,不知是認真過頭了,仍是粗心過頭了。

最後請注意:上面屢次提到「顯式」,「直觀」,切記。

相關文章
相關標籤/搜索