参考的Andrey Karpov的<<C++编程的 42 条建议>>

这里可能有一些老古董的东西,仅供参考

  • 11.单是文件终止符(EOF)的检查还不够。
  • 12.自动计算字符串长度。
  • 13.学会使用Override 和 final 标识符。
  • 14.不要再拿‘this’和 nullptr 比较。
  • 15.用 nullptr 不要用 NULL。

11.单是文件终止符(EOF)的检查还不够。

有时候‘cin.eof()’这个条件不够。考虑加‘cin.fail()’这一函数调用到条件表达式中。

template <typename T>
std::istream &operator >>(std::istream &i, sqlblob<T> &b)
{....while (!i.eof()) {i >> tmp;buf+=(tmp+' ');}....
}

解释:用eof()来检查文件结束不是充分条件,而且你无法确定是否出现了读取错误或者流出错,这两个都会引起特定的问题。如果有任何数据读取错误,就会导致无限循环,因为eof()总返回 false。这个在循环种可能会造成死循环。所以我们要用bad(), fail()来查询流状态。

建议:当用流来读取数据的时候,不要只使用 eof(),还要检查其他故障。 使用 bad() 和 fail()函数来检查流的状态。第一个函数是用来流的完整性,第二个函数是用来检查数据读取错误的。但是,用 bool()操作会更便捷一些,就像在正确代码那里显示的。

例子:

template <typename T>
std::istream &operator >>(std::istream &i, sqlblob<T> &b)
{....while (i >> tmp) {buf+=(tmp+' ');}....
}

12.自动计算字符串长度。

例如:

else if (!strncmp(vstart, "HEX", 3))

之后,用"BITLIST"代替"HEX" ,但是程序员忘了把 3 改为 7. 结果就是,字符串不是和"BITLIST"做比较,而是仅仅比较了"BIT"。这个错误似乎不太严重,但终究是个错误。
修改:

else if (!strncmp(vstart, "BITLIST", strlen("BITLIST")))

用strlen(“BITLIST”)会比较好
但这样是有缺点的:

  • 无法保证编译器会不会优化 strlen()调用:用一个常数来代替它。
  • 你要逐字复制字符串。看上去不好看,而且也会出错。
    在C++中我们可以用模板,我个人不喜欢用宏:
template<typename T, size_t N>
int mystrncmp(const T *a, const T (&b)[N])
{return _tcsnccmp(a, b, N - 1);
}

13.学会使用Override 和 final 标识符。

用了这两个标识符,对重写函数有帮助。

  • Override——表明该函数是重写基类中的虚函数。
  • Final——表明该函数在派生类中无需重写。
    例子:
class CFrameWndEx : public CFrameWnd {....virtual void WinHelp(DWORD_PTR dwData,UINT nCmd = HELP_CONTEXT) override;....
};

14.不要再拿‘this’和 nullptr 比较。

根据现代 C++标准,this 永远不会等于 nullptr。

15.用 nullptr 不要用 NULL。

关于C++的建议,仅仅为了规范代码(二)相关推荐

  1. 关于C++的建议,仅仅为了规范代码(一)

    参考的Andrey Karpov的<<C++编程的 42 条建议>> 这里可能有一些老古董的东西,仅供参考 1.不要复制粘贴太多相同的语句,要学会用循环解决问题. 2.大于 0 ...

  2. python代码大全中文注释_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)...

    本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...

  3. python代码_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)

    本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...

  4. PHP编码规范 代码样式风格规范

    一.基本约定 1.源文件 (1).纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?> : (2).源文件中PHP代码的编码格式必须是无BOM的UTF-8格式: (3).使用 U ...

  5. php团队规范,PHP团队 编码规范 代码样式风格规范

    一.基本约定 1.源文件 2.缩进 3.行 4.关键字 和 True/False/Null 5.命名 6.代码注释标签 7.业务模块 二.代码样式风格 1.命名空间(Namespace) 和 导入(U ...

  6. java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码

    原标题:程序员20分钟搞定粒子效果, 仅仅200行代码 这粒子的打造,确实没有布局代码,稍后大家在源码上可以看到,css代码都只有几行,绝大部分代码都是java代码,而且是原生java书写的,现在很多 ...

  7. 【线程池】自行准备linux环境,带你手写线程池,只需仅仅150行代码|内存池|API|连接池|应用协议丨C/C++Linux服务器开发

    [线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码 视频讲解如下,点击观看: [线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码|内存池|API|连接池|应用协 ...

  8. 【线程池】自行准备linux环境,带你手写线程池,只需仅仅150行代码

    [线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码 视频讲解如下,点击观看: [线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码|内存池|API|连接池|应用协 ...

  9. 仅仅9行代码 爬取教务处成绩 仅用2个模块 正方教务系统

    先挖个坑,最近几天补上,这是个最最最简单的爬虫了吧! 有点标题党了哈,其实把url,header,data都直接填入函数,session不拆开写,确实仅仅9行!然后仅仅9行代码. 想看的先收藏吧,别之 ...

最新文章

  1. oracle 树 向上查询,Oracle中显示树结构查询语句【子查父和父查子】
  2. 又一道软通动力7K月薪面试题——银行业务调度系统
  3. Maximum Product of Word Lengths
  4. Nginx在Windows平台的配置与使用
  5. java hprof_java 性能之 hprof
  6. Spring JPA数据+休眠+ MySQL + Maven
  7. java压缩文件能否不压缩路径_如何在Java中压缩文件而不包含文件路径
  8. 将pdbqt文件转成SMILES文件
  9. 2021年奎屯七中高考成绩查询,奎屯高考成绩查询
  10. 在Emacs中使用git
  11. sublime JS Format js格式化工具
  12. Docker概述(一)(标贝科技)
  13. android有道翻译api,有道智云自然翻译服务API
  14. 生产环境nginx集群高可用方案
  15. 音乐复兴:发烧友的耳朵有救了
  16. oracle 字符集问题处理,oracle 字符集问题解决
  17. Raptor-数字分解
  18. Py正则表达式学习笔记:特殊字符——中括号表达式、限定符表达式
  19. succi -测手速游戏
  20. 自相矛盾:一个进程可以自成死锁么?

热门文章

  1. 就算神游 之五:东京迪斯尼乐园 1
  2. 【廖雪峰官方网站/Java教程】多线程(2)
  3. C++标准库之stack
  4. [POJ2096] Collecting bugs
  5. 谷歌浏览器input中的text 和 button 水平对齐的问题
  6. scrollIntoView()窗口滚动
  7. MyBatis运行动态sql及存储过程
  8. Leetcode 48 Rotate Image
  9. Objective-C内存管理教程和原理剖析(三)
  10. java基础:13.2 集合框架 - LinkedList、Queue