C++——编程常见错误

C++库函数

C++标准库比C标准库要复杂很多,需要大家认真学习。C++标准库建立时间较晚,解决了C标准库的一些问题。通过认真学习、熟练掌握会对代码质量的提高有一定帮助。

一些建议:
1. 尽量使用迭代器代替下标操作
2. 尽量避免使用指针和数组 ,尽可能使用vector和迭代器
3. 采用 string 类型取代 C 风格字符串(使用标准库类型 string,除了增强安全性外,效率也提高了,因此应该尽量避免使用 C 风格字符串)
4. 用指针操作数组时应首先选用类似于迭代器的那种用法
5. const使用时,如果等价,尽量将const放在类型后,以避免类似于typedef使用中的错误
6. 一般而言,应该优先使用标准库抽象类而少用语言内置的低级数组和指针。尤其是应该使用 string 类型取代 C 风格以空字符结束的字符数组。现代 C++ 程序不应使用 C 风格字符串。

下面是一些在我们程序中发现的错误:

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对象建立失败,视频无法播放。)

不严谨的习惯,写程序不留心环境、上下文

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,不知是认真过头了,还是粗心过头了。

最后请注意:上面多次提到“显式”,“直观”,切记。

时间: 2024-08-04 00:20:36

C++——编程常见错误的相关文章

Linux编程常见错误及解决方案

对于linux新手来说Linux编程会经常遇见一些问题,今天列出新手们最经常遇到的编程错误,并提供解决方案: 1)由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误: undefined reference to 'pthread_create' undefined reference to 'pthread_join' 问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a

JAVA编程常见错误集锦(2)

32, car is not mapped 可能1: 在cfg.xml中没有增加映射的hbm.xml文件在<mapping.../>中 33, 属性没有找到 可能1: hbm.xml文件中的 <property name =""> 有问题, 也许是name的值与对应类中的成员名不一致 34,SQLException: 无当前连接 可能1:在比如创建帐户时没有对相应的方法添加到<list>中去,比如这个没有加入:<value>newAcco

android编程常见错误集锦

1.Eclipse 打开时提示fail to create JVM 问题 找到eclipse目录下的eclipse.ini,修改如下:

常见错误3——错误2 error C2143: 语法错误 : 缺少“;”(在“}”的前面)

常见错误3——错误2  error C2143: 语法错误 : 缺少“;”(在“}”的前面) (2012-08-12 12:07:08) 转载▼ 标签: 杂谈 分类: 编程常见错误集 很简单的一段程序,却出现如上错误,原因很简单,还是要注重细节! 01 #ifndef COLOR_H02 #define COLOR_H03 04 namespace GrabCut_DZY05 {06  class Color{07  public:08   Color();09  private:10   fl

C#编程的五个常见错误

[转自e良师益友网]尽管本文讨论的大多数错误是针对 C# 的,有些错误与其他以 CLR 为目标的语言,或者用到了 Framework Class Library (FCL) 的语言也相关.下面描述的五个常见错误: 常见错误1: 把引用当做值来用,或者反过来 C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用.然而,在C# 中,是值还是引用,是由写这个对象的程序员决定的,而不是实例化对象并赋值的程序员决定的.这往往会坑到 C# 的新手程序员. 如果你不知道

R语言编程中的常见错误

R语言编程中的常见错误有一些错误是R的初学者和经验丰富的R程序员都可能常犯的.如果程序出错了,请检查以下几方面.? 使用了错误的大小写.help().Help()和HELP()是三个不同的函数(只有第一个是正确的).? 忘记使用必要的引号.install.packages("gclus")能够正常执行,然而Install.packages(gclus)将会报错.? 在函数调用时忘记使用括号.例如,要使用help()而非help.即使函数无需参数,仍需加上().? 在Windows上,路

Python程序的常见错误(收集篇)

关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Application Development)中颇为受欢迎,同时Python还能作为脚本语言或者胶水语言讲现成的组件或者服务结合起来.Python支持模块(modules)和包(packages),所以也鼓励程序的模块化以及代码重用. 关于本文 Python简单.易学的语法可能会误导一些Python程序员(特别是那些

Python程序员的10个常见错误(转)

add by zhj:虽然学Python也有两年了,但这些问题的确容易犯,看来对Python的理解还有些地方不深入.先转了,有时间再好好看 译文:http://blog.jobbole.com/68256/ 本文由 伯乐在线 - datorhjaelten 翻译.未经许可,禁止转载!英文出处:toptal.欢迎加入翻译小组. 关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Ra

菜鸟调错(六)——Hibernate 4.3.x 注解常见错误及解决方案

编程的过程免不了遇到各种错误,各种问题,而遇到问题,解决问题的这个过程我认为是最让人兴奋的事情.越棘手的问题,解决以后带来的快感也越大.当一个问题你搞了一下午或者一天,甚至几天,当你解决的那一刻你会觉得你又获得了重生.甚至会感觉此时此刻整个世界都是你的. 啊哦,扯的有点远了.言归正传,今天我们要说的是关于Hibernate的一些常见错误.大家都知道Java项目更新一个版本可能与之前的版本有很大的差别,变化有时会很大.比如struts1和struts2,再比如Spring3.x由原来的一个jar包