写程序老是调bug调半天,是时候总结一下了!
总体分析
- 对于程序总体逻辑没有很好的把握
- 使用了自己一知半解的内容
- 对细节没有把握好
- 编译器存在差距
具体内容
逻辑方面
- 先后顺序错误,比如要赋值给别的变量的变量已经被其他值改变了。
- 数学公式推理不正确或不全面。
- 如插入排序中变量赋值顺序(比如应该用
for(int i = vec.size() - 1; i >= 0; i--)
而非习惯性的for(int i = 0; i != vec.size(); i++)
)错误,导致把空值赋给有效值,如是重复。
变量方面
- 对于 unsigned 型做减法,减到比0还小,这时 unsigned 值会变到很大很大(用我的话说是翻上去一轮 / 否极泰来 / 一失足成千古恨)。
Best Practice:
尽量不要对 unsigned 值做减法。比如在第一象限的坐标肯定是x,y>0,但是再做向下移动到x轴上,如果这么写if (y - 1 >= 0) { /* do something */ }
,这个判断就起不到作用了。
- 左值可写性要考虑清楚,尤其涉及到 const 的时候。
Best Pract