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注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果 ...
随机推荐
- Windows-添加环境变量(path)
使用命令提示符(cmd.批处理.Batch..bat)添加环境变量 永久环境变量 命令提示符下修改 注意:要使用管理员身份运行 cmd set PATH=%PATH%;要添加的路径 reg add & ...
- idea 查看字节码 bytecode插件 (jclasslib Bytecode Viewer、ASM Bytecode Viewer )
文章目录 jclasslib Bytecode Viewer ASM Bytecode Viewer jclasslib Bytecode Viewer 然后重启idea===>重新编译(构建项 ...
- upc组队赛7 Slimming Plan
Slimming Plan 题目描述 Chokudai loves eating so much. However, his doctor Akensho told him that he was o ...
- Tomcat启动脚本(2)catalina.bat
@echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...
- Python面试题之下面代码会输出什么
def f(x,l=[]): for i in range(x): l.append(i*i) print l f(2) f(3,[3,2,1]) f(3) 答案: [0, 1] [3, 2, 1, ...
- Python之OS(系统操作)模块常用函数
mkdir(path[, mode=0777]) makedirs(name,mode=511) rmdir(path) removedirs(path) listdir(path) getcwd() ...
- springboot中的mybatis是如果使用pagehelper的
springboot中使用其他组件都是基于自动配置的AutoConfiguration配置累的,pagehelper插件也是一样的,通过PageHelperAutoConfiguration的,这个类 ...
- MyBatis笔记二:配置
MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...
- 嵌入式 emmc 中 安装 烧录 内核 kernel,设备树 devicetree ,根文件系统 rootfs
一般调试嵌入式开发板喜欢选择 利用 TFTP 传送 内核与 设备树, 利用 nfs 加载根文件系统. uboot 环境变量 设置如下: bootargs=root=/dev/nfs rw nfs ...
- qt大小写字符串比较
https://blog.csdn.net/GraceLand525/article/details/48625593 Qt::CaseSensitivity cs = Qt::CaseInsensi ...