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++——编程常见错误的更多相关文章

  1. VS 编程常见错误及解决方法

    1. VS2013 无法打开包括文件:“cv.h"等一些头文件 解决方法: cv.h是build\include文件夹下的头文件,所在文件夹位置是D:\Program Files (x86) ...

  2. C++编程常见错误

    1.成员变量要记得在构造函数中初始化 2.还是初始化!初始化!初始化!

  3. 以太坊solidity编程常见错误(不定期更新)

    1.报错: Expected token Semicolon got 'eth_compileSolidity' funtion setFunder(uint _u,uint _amount){ 解决 ...

  4. VS编程常见的编译和链接错误

    常见错误1: Error 2 error LNK1120: 1 unresolved externals Error 1 error LNK2019: unresolved external symb ...

  5. R语言编程中的常见错误

    R语言编程中的常见错误有一些错误是R的初学者和经验丰富的R程序员都可能常犯的.如果程序出错了,请检查以下几方面. 使用了错误的大小写.help().Help()和HELP()是三个不同的函数(只有第 ...

  6. .NET中的异步编程——常见的错误和最佳实践

    在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章<.NET中的异步编程——动机和单元测试>中,我们开始分析.NET世界中的异步编程.在那篇文章中 ...

  7. python编程中常见错误

    python编程培训中常见错误最后,我想谈谈使用更多python函数(数据类型.函数.模块.类等)时可能遇到的问题.由于篇幅有限,我们试图将其简化,特别是一些高级概念.有关更多详细信息,请阅读学习py ...

  8. 初识JAVA(二)(送给Java和安卓初学者)----常见错误

    博主接着上篇的来讲哦,以后的更新中,博主会出一些练习题,有兴趣的可以做做然后吧代码粘贴到下面,大家可以一起研究学习,一起进步,本篇文章主要讲的是: 一.常见错误 二.连接上篇一起的训练 无论是什么方向 ...

  9. struts2.5框架使用通配符指定方法常见错误

    struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace ...

随机推荐

  1. 接口API封装中常见的HTTP状态码

    在进行后端接口API封装的过程中,需要考虑各种错误信息的输出.一般情况下,根据相应问题输出适合的HTTP状态码,可以方便前端快速定位错误,减少沟通成本. HTTP状态码有很多,每个都有对应的含义,下面 ...

  2. scala成长之路(1)基本语法和数据类型

    scala作为JVM上的Lisp,是一种geek类型的编程语言,也一直是我等java程序员眼中的梦寐以求的一门技能,遂下定决心花一段时间好好学习scala.第一天学习,主要介绍与java在编程上的主要 ...

  3. Blah数集

    Blah数集 描述 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下: (1) a是集合Ba的基,且a是Ba的第一个元素: (2)如果x在集合Ba中,则2x+1 ...

  4. Python:正则表达式—— re 模块

    一.什么是正则表达式(Regular Expression) 正则表达式本身是一种小型的.高度专业化的编程语言,它内嵌在Python中,并通过 re(regular expression)模块实现.使 ...

  5. 用ServiceStack操作使用redis的问题

    最近在学习Redis,查阅网上很多资料后使用SericeStack连接redis.在nuget中下载ServiceStack.Redis,主要使用到四个dll 但是运行之后会出现一堆奇怪问题:没有实现 ...

  6. crm踩坑记(一)

    目录 antd es6 Object.entries() Object.keys() Object.getOwnPropertyNames() 很神奇的用法!!! eslint 傻逼 其他 参考 an ...

  7. 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4

    孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

  8. Java中大数的使用与Java入门(NCPC-Intergalactic Bidding)

    引入 前几天参加湖南多校的比赛,其中有这样一道题,需要使用高精度,同时需要排序,如果用c++实现的话,重载运算符很麻烦,于是直接学习了一发怎样用Java写大数,同时也算是学习Java基本常识了 题目 ...

  9. 配置SSH无密钥登陆(三)

    配置SSH无密钥登陆 (1).关闭防火墙 对每个虚拟机进行如下操作:   su    chkconfig  iptables  off 执行之后重启虚拟机:reboot (2).关闭之后,在maste ...

  10. Word2Vec词向量(一)

    一.词向量基础(一)来源背景  word2vec是google在2013年推出的一个NLP工具,它的特点是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系.虽然源码是 ...