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

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

最新文章

  1. 利用AE编写切图工具的一些探讨
  2. Copy page via powershell and not save as template 分类: Sharepoint 2015-07-16 16:39 4人阅读 评论(0) 收藏
  3. mapreduce作业状态一直是ACCEPTED
  4. Nine-Patch图片
  5. PAT乙级 1008. 数组元素循环右移问题 (20)
  6. linux包之procps之pmap命令
  7. bzoj2127: happiness
  8. 优秀的VeriSign和混蛋的GlobalSign
  9. THREE.JS + Blender(obj、mtl加载代码)
  10. JMS and ActiveMQ first lesson(转)
  11. VR问题无关方向,VR全景为您领航,全景智慧城市已势不可当
  12. 验证码无法显示,服务器端出现异常:Could not initialize class sun.awt.X11GraphicsEnvironment
  13. 第39节:Java当中的IO
  14. scrapy 代码调试用 shell
  15. 【php增删改查实例】第九节 - 部门管理模块(模糊查询)
  16. Windows安装pycrypto失败记录
  17. Wannafly 挑战赛 19 参考题解
  18. delphi 启动停止windows服务 转
  19. Json与bean的相互转换
  20. JSON-java

热门文章

  1. 基于webSocket的聊天室
  2. laravel构造函数跳转失败
  3. Dynamics 365-下载新版本的开发工具
  4. Qt之pro文件解析
  5. clear()、sync()、ignore()
  6. 10-C++远征之模板篇-学习笔记
  7. python2中将Unicode编码的中文和str相互转换
  8. linux io 学习笔记(01)---锁,信号量
  9. 10 TCP 传输控制协议 UDP区别
  10. Hbase表格设计