关于C++的建议,仅仅为了规范代码(二)
参考的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++的建议,仅仅为了规范代码(二)相关推荐
- 关于C++的建议,仅仅为了规范代码(一)
参考的Andrey Karpov的<<C++编程的 42 条建议>> 这里可能有一些老古董的东西,仅供参考 1.不要复制粘贴太多相同的语句,要学会用循环解决问题. 2.大于 0 ...
- python代码大全中文注释_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)...
本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...
- python代码_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)
本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...
- PHP编码规范 代码样式风格规范
一.基本约定 1.源文件 (1).纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?> : (2).源文件中PHP代码的编码格式必须是无BOM的UTF-8格式: (3).使用 U ...
- php团队规范,PHP团队 编码规范 代码样式风格规范
一.基本约定 1.源文件 2.缩进 3.行 4.关键字 和 True/False/Null 5.命名 6.代码注释标签 7.业务模块 二.代码样式风格 1.命名空间(Namespace) 和 导入(U ...
- java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码
原标题:程序员20分钟搞定粒子效果, 仅仅200行代码 这粒子的打造,确实没有布局代码,稍后大家在源码上可以看到,css代码都只有几行,绝大部分代码都是java代码,而且是原生java书写的,现在很多 ...
- 【线程池】自行准备linux环境,带你手写线程池,只需仅仅150行代码|内存池|API|连接池|应用协议丨C/C++Linux服务器开发
[线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码 视频讲解如下,点击观看: [线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码|内存池|API|连接池|应用协 ...
- 【线程池】自行准备linux环境,带你手写线程池,只需仅仅150行代码
[线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码 视频讲解如下,点击观看: [线程池]自行准备linux环境,带你手写线程池,只需仅仅150行代码|内存池|API|连接池|应用协 ...
- 仅仅9行代码 爬取教务处成绩 仅用2个模块 正方教务系统
先挖个坑,最近几天补上,这是个最最最简单的爬虫了吧! 有点标题党了哈,其实把url,header,data都直接填入函数,session不拆开写,确实仅仅9行!然后仅仅9行代码. 想看的先收藏吧,别之 ...
最新文章
- oracle 树 向上查询,Oracle中显示树结构查询语句【子查父和父查子】
- 又一道软通动力7K月薪面试题——银行业务调度系统
- Maximum Product of Word Lengths
- Nginx在Windows平台的配置与使用
- java hprof_java 性能之 hprof
- Spring JPA数据+休眠+ MySQL + Maven
- java压缩文件能否不压缩路径_如何在Java中压缩文件而不包含文件路径
- 将pdbqt文件转成SMILES文件
- 2021年奎屯七中高考成绩查询,奎屯高考成绩查询
- 在Emacs中使用git
- sublime JS Format js格式化工具
- Docker概述(一)(标贝科技)
- android有道翻译api,有道智云自然翻译服务API
- 生产环境nginx集群高可用方案
- 音乐复兴:发烧友的耳朵有救了
- oracle 字符集问题处理,oracle 字符集问题解决
- Raptor-数字分解
- Py正则表达式学习笔记:特殊字符——中括号表达式、限定符表达式
- succi -测手速游戏
- 自相矛盾:一个进程可以自成死锁么?