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注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果 ...
随机推荐
- php对接极光推送
首先要明白php对接极光推送要做些什么,极光推送的大致流程是:你的服务器----->极光服务器------>app端.而php要做的就只有我们的服务器到极光服务器这个过程.极光服务器到ap ...
- spring mvc 接入cas登录
费劲千辛万苦开发出来的系统要接入sso 让我头大还好有大佬帮忙 首先在配置文件中写入启动的ip地址 HOST=http://127.0.0.1:8080/ 地址写你的地址和端口 然后在pom文件中导入 ...
- 畜禽免疫系统使用LODOP打印
<div class="btn_box"> <asp:Button ID="btnPrint" Text="预览并打印" ...
- OAccflow集成sql
SELECT * FROM PORT_EMP WHERE NO='18336309966'SELECT * FROM PORT_DEPT WHERE no='42DBAF50712C4046B09BC ...
- activiti7删除流程定义的相关信息
package com.zcc.activiti02; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proc ...
- helm-mode打开文件支持中文搜索
helm-mode打开文件支持中文搜索 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #83949 ...
- Redis Sentinel 高可用方案
redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...
- 3.3-Cypher语言及语法使用
Cypher是一种图数据库查询语言,表现力丰富,查询效率高,其地位和作用与关系型数据库中的SQL语言相当. Cypher具备的能力: Cypher通过模式匹配图数据库中的节点和关系,来提取信息或者修改 ...
- Tomcat发布项目的几种方式
如何在浏览器访问一个xml文件 拷贝这个文件到webapps/ROOT底下, 在浏览器里面访问 直接把tomcat/webapps/ROOT目录下 浏览器访问http://localhost:8080 ...
- NDK笔记(二)-在Android Studio中使用ndk-build(转)
前面一篇我们接触了CMake,这一篇写写关于ndk-build的使用过程.刚刚用到,想到哪儿写哪儿. 环境背景 Android开发IDE版本:AndroidStudio 2.2以上版本(目前已经升级到 ...