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 ...
随机推荐
- Java源码解析——集合框架(二)——ArrayBlockingQueue
ArrayBlockingQueue源码解析 ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection ...
- Windows环境下安装redis及PHP Redis扩展
附带管理工具安装教程 安装环境 WNMP环境 参考教程:WIN10下WNMP开发环境部署 安装windows的redis服务 安装包下载 选择msi安装包下载并安装,下载可能会有点慢,请自行使用梯子. ...
- js 节点
var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNode; //得到s的父节点 var ns=s.nextSbiling; //获得s的下 ...
- flask过滤器
过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器. 过滤器的使用方 ...
- C语言实例解析精粹学习笔记——35(报数游戏)
实例35: 设由n个人站成一圈,分别被编号1,2,3,4,……,n.第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出. 实例解析: 用链 ...
- Fabric go sdk初始化所需证书解析
fabric sdk go 提供的官方文档少之又少,要想入门,主要就靠研究官方的e2e系列示例,这真的是一件挺无奈的事情.没法子,只能硬着头皮上了.研究发现,e2e这个例子是通过cryptogen生成 ...
- [转载]三小时学会Kubernetes:容器编排详细指南
原翻译by梁晓勇 原英文:Learn Kubernetes in Under 3 Hours: A Detailed Guide to Orchestrating Containers 我很奇怪,为什 ...
- ffmpeg安装配置以及库调用
参考https://blog.csdn.net/jayson_jang/article/details/52329508 cd ffmpeg ./configure --enable-shared - ...
- Delphi中客户端获取数据库更新信息(更新条数)
1.SQL语句 from tb where xxx='XXX') //不存在,则插入数据 begin insert into tb(xxx) values('XXX') //这里自己定义,插入或更新都 ...
- c/c++容器操作
C++中的容器大致可以分为两个大类:顺序容器和关联容器.顺序容器中包含有顺序容器适配器. 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素.主要有vector.list.de ...