C++——代码风格
google代码风格
1.使用安全的分配器(allocator),如scoped_ptr,scoped_array
2.测试用的,其他的不能用:
2.1 友元
2.2 C++异常
2.3 RTTI
3.类型转换,不要用(int)
3.1 static_cast:较大的算术类型赋值给较小的类型时,知道且不在乎精度损失
double slope=static_cast<double> (j)/i;
3.2 const_cast:常用于有函数重载的上下文
const char *cp;
char *p=static_cast<char*>(cp);//正确,但不能通过p写值 static_cast<string>(cp);//正确,字符串转string
const_cast<string>(cp);//❌,const_cast只能改变常量属性
3.3 reinterpret_cast:为运算对象的位模式提供较低层次的重新解释,危险,避免使用
int *ip;
char *pc=reinterpret_cast<char*>(ip);//pc指向的是一个int,而不是字符 string str(pc);//错误
3.4 dynamic_cast,RRTI运行时类型识别
4.流用于日志,其他不要用(因为很容易用错类型)
5. 使用assertion声明变量,而非unsigned
6. 用于STL中,对于仿函数(functors)和特性(traits)可以不用class而用struct。其他一律用class
7.类
7.1 类成员有虚函数,析构函数为虚。(?)
7.2 重载操作符&的类不能被前置声明
7.3 尽量不要重载,而是用equals(),copyFrom()等替代
7.4 仿函数类:
8. *p++=*(p++)
9.for 循环
vector<int> v={,,,,,,,,,};
for (auto &r:v)//引用才能写操作
r*=;
10.如果需要
的话,可以定义类似 Equals()、CopyFrom()等函数。
然而,极少数情况下需要重载操作符以便与模板或“标准”C++类衔接(如
operator<<(ostream&, const T&)),如果被证明是正当的尚可接受,但你要尽可能避
免这样做。尤其是不要仅仅为了在 STL 容器中作为 key 使用就重载 operator==或
operator<,取而代之,你应该在声明容器的时候,创建相等判断和大小比较的仿函数类
11.boost库。
优点:Boost 代码质量普遍较高、可移植性好,填补了 C++标准库很多空白,如型别特性
(type traits)、更完善的绑定(binders)、更好的智能指针,同时还提供了 TR1(标
准库的扩展)的实现。
缺点:某些 Boost 库提倡的编程实践可读性差,像元程序(metaprogramming)和其他
高级模板技术,以及过度“函数化”("functional")的编程风格。
结论:为了向阅读和维护代码的人员提供更好的可读性,我们只允许使用 Boost 特性的一
个成熟子集,当前,这些库包括:
1) Compressed Pair:boost/compressed_pair.hpp;
2) Pointer Container:boost/ptr_container 不包括 ptr_array.hpp 和序列化
(serialization)。
我们会积极考虑添加可以的 Boost 特性,所以不必拘泥于该规则
12.习惯
1. 对于智能指针,安全第一、方便第二,尽可能局部化(scoped_ptr);
2. 引用形参加上 const,否则使用指针形参;
3. 函数重载的使用要清晰、易读
4. 鉴于容易误用,禁止使用缺省函数参数(值得商榷);
5. 禁止使用变长数组;
6. 合理使用友元;
7. 为了方便代码管理,禁止使用异常(值得商榷);
8. 禁止使用 RTTI,否则重新设计代码吧;
9. 使用 C++风格的类型转换,除单元测试外不要使用 dynamic_cast;
10. 使用流还 printf + read/write,it is a problem;
11. 能用前置自增/减不用后置自增/减;
12. const 能用则用,提倡 const 在前;
13. 使用确定大小的整型,除位组外不要使用无符号型;
14. 格式化输出及结构对齐时,注意 32 位和 64 位的系统差异;
15. 除字符串化、连接外尽量避免使用宏;
16. 整数用 0,实数用 0.0,指针用 NULL,字符(串)用'\0';
17. 用 sizeof(varname)代替 sizeof(type);
18. 只使用 Boost 中被认可的库。
问题:
1.仿函数(functors)和特性(traits):如果与 STL 结合,对于仿函数(functors)和 特 性( traits)可以不用 class 而是使用 struct。
C++——代码风格的更多相关文章
- Python 代码风格
1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...
- .NET 项目代码风格要求
原文:http://kb.cnblogs.com/page/179593/ 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份&l ...
- AngularJS之代码风格36条建议【一】(九)
前言 其实在新学一门知识时,我们应该注意下怎么书写代码更加规范,从开始就注意养成一个良好的习惯无论是对于bug的查找还是走人后别人熟悉代码都是非常好的,利人利己的事情何乐而不为呢,关于AngularJ ...
- Visual Studio Code 使用 ESLint 增强代码风格检查
前言 在团队协作开发中,为了统一代码风格,避免一些低级错误,应该设有团队成员统一遵守的编码规范.很多语言都提供了Lint工具来实现这样的功能,JavaScript也有类似的工具:ESLint.除了可以 ...
- plain framework 1 参考手册 入门指引之 代码风格
代码风格 介绍 介绍 框架自身采用了google的C++风格,作者也鼓励在你的应用中使用此风格,有关此风格你可以查阅相关资料了解.下面是一段plain framework中的代码,以便大家参考: 你可 ...
- 对 JimmyZhang 老师的文章《项目代码风格要求》的一些个人观点
Jimmy Zhang 老师是博客园中我最佩服的人之一,今天看了他的文章<项目代码风格要求>觉得大部分地方我都很认同,工作中也是强迫自己也要按照规范来编程.下面是我的一些个人观点,想贴出来 ...
- python代码风格-PEP8
转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...
- Google HTML/CSS代码风格指南(中文版)
原文链接:http://wncbl.cn/posts/c8e10815/ 看一下没什么印象,那就写一遍吧. 背景 本文档定义了HTML/CSS的编写格式和风格规则.它旨在提高合作和代码质量,并使其支持 ...
- .Net 项目代码风格要求小结
代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. ...
- .net 代码风格规范
声明:内容非原创,转自张子阳博客. 对于为什么是转载,唯一原因就是这东西居然比我整理的好,直接用得了. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果 ...
随机推荐
- 前端工程师技能图谱skill-map
# 前端工程师技能图谱 ## 浏览器 - IE6/7/8/9/10/11 (Trident) - Firefox (Gecko) - Chrome/Chromium (Blink) - Safari ...
- 关于UI自动化测试的思考
不知不觉,时间过去了二年多,从开始想学习自动化(UI自动化到上手做项目)到上手,到能独立开发一个项目的UI自动化脚本. 一直在学习,边做边学,边看边学.边总结(具体看我的博客,其中大部分都是自己的理解 ...
- OO七大设计原则
一.单一职责原则(Single Responsibility Principle,SRP) 含义: 1.避免相同的职责分散到不同的类中 2.避免一个类承担太多职责 作用: 1.可以减少类之间的耦合 2 ...
- Oracle查询最近执行过的SQL语句
oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc; SELECT ...
- bootstrapTble 的一些小结
前言: 1.bootstrapTable 官网 http://bootstrap-table.wenzhixin.net.cn/zh-cn/ ,http://bootstrap-table.wenz ...
- spark复习总结01
1.MapReduce和spark的对比 MapReduce Spark 数据存储结构:磁盘hdfs文件系统的split 使用内存构建弹性分布式数据集RDD,对数据进行运算和cache 编程范式:Ma ...
- vue - blog开发学习3
1.添加less 和less-loader支持 npm install less less-loader --save-dev 2.新建main.less,将这个样式添加到home.vue中的cont ...
- document.createDocumentFragment()的用法
createDocumentFragment有什么作用呢? 调用多次document.body.append(),每次都要刷新页面一次.效率也就大打折扣了,而使用document_createDocu ...
- 在AndroidStudio2.3.2下JNI开发的详细步骤(转)
转自:http://blog.csdn.net/luhaoying1111/article/details/72468867 安装NDK 在工具栏点击File->Settings->App ...
- nodejs 模板引擎jade的简单使用(2)
1.jade html head style body div.box div#div1 div aaa div(class="aaa left-warp active") div ...