1、所有头文件使用#ifndef #define #endif来防止文件被多重包含,命名格式当是:

<PROJECT>_<PATH>_<FILE>_H_

2、只有当函数只有10行甚至更少时才将其定义为内联函数。内联函数必须放在.h文件中。

3、鼓励使用匿名命名空间,以避免运行时的命名冲突,不要在.h文件中使用匿名命名空间。

4、局部变量

允许在任何位置声明变量,提倡在尽可能小的作用域中 变量,离第一次使用越近越好。应使用初始化的方式替代声明再赋值。

好的声明方式:

Int j = g();

Vector<int> v = {1, 3};

5、所有按引用传递的参数必须加上const

6、不允许使用变长数组和alloca()。应使用更安全的分配器,像std::vector或std::unique_ptr<T[]>.

7、允许合理地使用友元类及友元函数。

8、不使用C++异常。

9、禁止使用RTTI

10、     使用c++的类型转换,如static_cast<>()。不要使用int y = (int)x等方式。

11、     只在记录日志时使用流

12、     使用c++11的constexpr来定义真正的常量,或实现常量初始化。

13、     C++内建整型中,仅使用int。如果程序中需要使用不同大小的变量,可以使用<stdint.h>中长度精确的整型,如int16_t.

头文件stdint.h中定义了int16_t,uint32_t,int64_t等整型,在合适的情况下,推荐使用标准类型如size_t和ptrdiff_t。

14、     尽可能使用sizeof(变量名)代替sizeof(类型)。因为代码中的变量类型改变时会自动更新。

15、     Auto只能用在局部变量里,别用在文件作用域变量,命名空间作用域变量和类数据成员里。永远别列表初始化auto变量。

16、     命名约定。

l  通用命名规则

函数命名、变量命名、文件命名要有描述性。少用缩写

l  文件命名

文件名要全部小写,可以包含下划线”_”或连字符“”“-”,依照项目的约定。如果没有约定,那么“_”更好。

C++文件要以.cpp结尾,头文件以.h结尾,专门插入文本的文件则以.inc结尾。不要使用已存在于/usr/include下的文件名。

查找和系统头文件重名方法:

Find /usr/include |grep –i ‘要取得名字.h’

l  类型命名

类型名称的每个单词首字母均大写,不包含下划线。所有类型命名,包括类、结构体、类型定义(typedef)、枚举和类型模板参数,均使用相同约定,即以大写字母开始,每个单词首字母均大写,不包含下划线,例如:

class UrlTable{……}

class UrlTableTester{……}

struct UrlTableProperties{}

typedef hash_map<UrlTableProperties *, string> PropertiesMap;

l  变量命名

变量(包括函数参数)和数据成员名一律小写,单词之间使用下划线连接。类的成员变量以下划线结尾,但结构体的不用。

l  常量命名

声明为constexpr或const的变量,或在程序运行期间其值始终保持不变的,命名时以”k”开头,大小写混合。

例如:

const int kDaysInAWeek = 7;

l  函数命名

常规函数使用大小写混合,取值和设值函数则要求与变量名匹配。

一般来说,函数名的每个单词首字母大写(即“驼峰变量名”),没有下划线,对于首字母缩写的单词,更倾向于将它们视为一个单词进行首字母大写,如写作StartRpc()而非StartRPC()。

同样的命名规则适用于类作用域与命名空间作用域的常量。

l  命名空间命名

命名空间以小写字母命名,最高级命名空间的名字取决于项目名称。

l  枚举命名

枚举的命名应与常量一致:kEnumName

17、     注释

类注释:每个类的定义都要附带一份注释,描述类的功能和用法,除非他的功能相当明显。

函数注释:函数声明处的注释描述函数功能,定义处的注释描述函数实现。

18、     使用空格(每次缩进2个空格)而不使用制表符。应该讲制表符设置为2个空格。

19、     返回类型和函数名在同一行,参数也尽量放在同一行。换行后的参数保持4个空格的缩进。

20、     Lambda表达式

若用引用捕获,在变量名和&之间不留空格。

21、     指针和引用表达式

句点或箭头前后不要有空格。指针或地址操作符(*,&)之后不要有空格。在声明指针变量或参数时,*与类型或变量名紧挨都可以。不允许在多重声明中使用&或*。

22、     访问控制块的声明依次是public:,protected:,private:,每个都缩进1个空格。

23、     构造函数初始值列表:放在同一行或者按4个空格缩进并排多行。

24、     命名空间内容不缩进。

25、     水平留白的使用根据在代码中的位置决定。永远不要在行尾添加没意义的留白。

If条件语句和循环语句关键字后均有空格。

赋值运算符等二元运算符前后总是有空格。

尖括号不与空格紧邻,<前没有空格,>和(之间也没有。

如:vector<string> x;

y = static_cast<char *>(x)

26、     垂直留白

不在万不得已,不使用空行,尤其是在两个函数定义之间的空行不要超过两行。函数体首尾不要留空行,函数体中也不要随意添加空行。

cpp编码规范要求的更多相关文章

  1. UE4编码规范

    翻译原文为Unreal 的官方!自己看着总结了一下,不一定每条都能对上.不足之处,请多多不吝赐教! 原文地址:  unreal CodingStandard UE4编码规范 在Epic,有简单几条代码 ...

  2. 最全面的C/C++编码规范总结

    C语言是面向过程的,而C++是面向对象的 对于不同的编程语言来说,具体的编码规范可以有很大的不同,但是其宗旨都是一致的,就是保证代码在高质量完成需求的同时具备良好的可读性.可维护性.例如我们可以规定某 ...

  3. LLVM 编码规范 - 中文翻译

    LLVM 编码规范 导论 语言.库和标准 C++ 标准版本 C++ 标准库 Go 代码准则 机械的代码问题 代码格式化 注释 头文件 类概述 method information 注释格式化 使用Do ...

  4. Android的编码规范

    一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...

  5. PHP 高级编程(1/5) - 编码规范及文档编写

    PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的 ...

  6. 【原】JAVA SE编码规范

    /* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...

  7. 浅谈Android编码规范及命名规范

    前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...

  8. PHP编码规范PSR-2

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  9. Objective-C开发编码规范【转载】

    概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序.关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: Apple Coding Guide ...

随机推荐

  1. SSIS数据同步实践

    SSIS数据同步实践   背景 在已初步验证不同实例下同构表数据同步方案之后,为了实现数据持续同步,需使用SSIS把之前的生成脚本和执行脚本的两个步骤组合在一起部署成包之后,通过JOB定时去执行: 测 ...

  2. JAVA 基础编程练习题12 【程序 12 计算奖金】

    12 [程序 12 计算奖金] 题目:企业发放的奖金根据利润提成.利润(I)低于或等于 10 万元时,奖金可提 10%:利润高于 10 万元, 低于 20 万元时,低于 10 万元的部分按 10%提成 ...

  3. 一起学习linux环境的git

    第一节 GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS.Subversion不同,它不必服务器端 ...

  4. php支持多个地址跨域访问

    //跨域访问的时候才会存在此字段 $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : ''; $allow_ori ...

  5. Java泛型(10):泛型与异常

    由于擦除的原因,将泛型运用于异常是非常受限的.catch语句不能捕获泛型类型的异常,因为在编译期和运行期都必须知道异常的确切类型.但是,类型参数可能会在一个方法的throw子句中用到.这使得你可以编写 ...

  6. Python multiprocess模块(中)

    主要内容: 一. 锁 二. 信号量 三. 事件 通过event来完成红绿灯模型 四. 队列(重点) 队列实现进程间的通信 五. 生产者消费者模型 1. 初始版本(程序会阻塞住) 2. 升级版本一(通过 ...

  7. 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证!

    转载:https://www.jianshu.com/p/310d930dd62f 1 前言 这篇文章主要想解决的问题是,在对安卓手机APP抓包时,出现的HTTPS报文通过MITM代理后证书不被信任的 ...

  8. 【并行计算-CUDA开发】CUDA并行存储模型

    CUDA并行存储模型 CUDA将CPU作为主机(Host),GPU作为设备(Device).一个系统中可以有一个主机和多个设备.CPU负责逻辑性强的事务处理和串行计算,GPU专注于执行高度线程化的并行 ...

  9. SSRF绕过姿势

    0x00 什么是SSRF? SSRF(Server-Side Request Forgery,服务器端请求伪造):是一种由攻击者构造形成由服务器端发起请求的一个漏洞. SSRF 攻击的目标是从外网无法 ...

  10. luogu P4513 小白逛公园 (区间合并)

    链接:https://www.luogu.org/problemnew/show/P4513 思路: 很基础的区间合并,开四个数组: num: 区间数字的和 lsum:从左端点起最大连续字段和 rsu ...