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,不知是认真过头了,还是粗心过头了。
最后请注意:上面多次提到“显式”,“直观”,切记。
C++——编程常见错误的更多相关文章
- VS 编程常见错误及解决方法
1. VS2013 无法打开包括文件:“cv.h"等一些头文件 解决方法: cv.h是build\include文件夹下的头文件,所在文件夹位置是D:\Program Files (x86) ...
- C++编程常见错误
1.成员变量要记得在构造函数中初始化 2.还是初始化!初始化!初始化!
- 以太坊solidity编程常见错误(不定期更新)
1.报错: Expected token Semicolon got 'eth_compileSolidity' funtion setFunder(uint _u,uint _amount){ 解决 ...
- VS编程常见的编译和链接错误
常见错误1: Error 2 error LNK1120: 1 unresolved externals Error 1 error LNK2019: unresolved external symb ...
- R语言编程中的常见错误
R语言编程中的常见错误有一些错误是R的初学者和经验丰富的R程序员都可能常犯的.如果程序出错了,请检查以下几方面. 使用了错误的大小写.help().Help()和HELP()是三个不同的函数(只有第 ...
- .NET中的异步编程——常见的错误和最佳实践
在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章<.NET中的异步编程——动机和单元测试>中,我们开始分析.NET世界中的异步编程.在那篇文章中 ...
- python编程中常见错误
python编程培训中常见错误最后,我想谈谈使用更多python函数(数据类型.函数.模块.类等)时可能遇到的问题.由于篇幅有限,我们试图将其简化,特别是一些高级概念.有关更多详细信息,请阅读学习py ...
- 初识JAVA(二)(送给Java和安卓初学者)----常见错误
博主接着上篇的来讲哦,以后的更新中,博主会出一些练习题,有兴趣的可以做做然后吧代码粘贴到下面,大家可以一起研究学习,一起进步,本篇文章主要讲的是: 一.常见错误 二.连接上篇一起的训练 无论是什么方向 ...
- struts2.5框架使用通配符指定方法常见错误
struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace ...
随机推荐
- HTML5+ MUI实现ajax的一个demo
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- MyBatis实现拦截器分页功能
1.原理 在mybatis使用拦截器(interceptor),截获所执行方法的sql语句与参数. (1)修改sql的查询结果:将原sql改为查询count(*) 也就是条数 (2)将语句sql进行拼 ...
- 第一个python代码
# -*- coding:utf-8 -*- user = raw_input("请输入用户名") passwd = raw_input("请输入密码") if ...
- powerpoint教程资料,PPT的
Powerpoint,是微软公司设计的演示文稿软件,利用Powerpoint不仅可以创建演示文稿,还可以在互联网上召开面对面会议.远程会议或在网上给观众展示演示文稿,掌握利用PowerPoint是一项 ...
- 二维数组快速排序(sort+qsort)
二维数组快速排序 qsort是c中快速排序,如果简单的一维数组排序,想必大家的懂.现在看一下二维数组的排序,虽然可以冒泡但是太费时间了,我们这里使用qsort来快速排序,看代码应该看得懂吧. 代码: ...
- vuejs中的计算属性和监视
计算属性 1.在computed属性对象中定义计算属性的方法,在页面上使用{{方法名}}来显示计算结果 2.通过getter/setter实现对属性数据的显示和监视 3.计算属性存在缓存,多次读取只执 ...
- c++ map的使用方法
1.头文件:#include<map> 2.定义:map<typename1,typename2> mp 注:字符串数组只能用string而不能使用char[] 3.访问方式: ...
- RHEL-7.1 Server.x86_64 yum源设置为光盘
1.挂载光盘 首先在media目录下创建文件夹CentOS mkdir CentOS 然后将光盘挂载在CentOS下 mount -t iso9660 -o loop /dev/cdrom /medi ...
- Less入门教程
http://www.cnblogs.com/fsjohnhuang/p/4187675.html
- 商业地产 招商 招租 CRM 意向 洽谈 合同 复用商铺商户管理系统
适用场合 本软件适合商业地产的对招商的全流程管理,包括商铺信息,商户信息,洽谈信息,意向签订,合同管理等. 软件有试用版可供下载试用. 联系方式 QQ:2417158658 Tel:130251102 ...