总结一下这几天自己的领悟
初到公司实习,项目经理给我了5天时间看c++代码规范和了解项目。这几天听他们讨论最多的就是联调和改Bug了,还有什么jar包,我也听不懂,可能是每一个项目开发都会经历的必经之路。
1.#define保护
格式:
#ifndef 项目名_路径名_文件名_H_(如果文件不存在)
#define 项目名_路径名_文件名_H_(引入头文件)
#endif (如果存在就不引入)
避免了头文件重复包含
2.内联函数
不要内联超过10行的函数,内联析构函数时注意,它往往比你看到的长,不建议内联循环结构
3.函数的形参顺序
输入函数在前,输出函数在后
4.头文件的包含次序
c库》》c++库》》其他库的.h》》项目内的.h
项目目录按字母排序
5.命名空间
提倡使用不具名命名空间(作用域限定在本文件中,不要在头文件中定义),具名命名空间也可使用,但是不要使用using指示符(防止污染命名空间)
6.结构体和类
只有纯数据时使用struct,其他情况一概使用class
7.继承
所有继承必须是Public 该类具有虚函数,其析构也应该为虚函数
8.引用参数
函数形参表中,所有引用必须是cont STL容器不接受引用形参,这种情况必须以指针形参声明函数
9.禁止使用缺省参数,变长数组和alloca
10.强制类型转换,使用c++风格的类型转换
static_cast:数值的强制转换
const_cast:移除const属性
reinterpret_cast:指针类型和整型或其他指针间不安全的相互转换
dynamic_cast:除测试外不建议使用
11.前置自增和自减
对简单数值来说,两种都一样。对迭代器和模板类型来说,使前置自增(减少了一次拷贝操作,非数值的拷贝代价太大)
12.对const的使用
在变量或者参数前加关键字const指明变量值不可改
const int foo
为类中的函数加上cons限定表面函数不会修改成员变量
class {int Bar (char c)const ;}
函数不会修改传入的引用或指针类型的参数时需加const
访问函数总是const,其他函数如果不修改任何数据成员也应是const
如果数据成员在构造后不再改变也可定义为const
注意:const int *foo==int const *foo
13.整型
一般认为int为32位,大于32位需要定义为int64_t或uint64_t
14.宏
能用内联函数,枚举和常量代替就不用宏
不要在.h中定义宏
常用结构
#define MAX 50
#include “common.h”
#undef MAX
此时MAX只能作用于comon.h中
15.0和NULL
整数用0,实数用0.0,指针用NULL,字符(串)用“\0”
16.命名规则
尽可能给出描述性名称,不要节约空间
文件名要全小写,可以包含‘_’或‘-’(.h或.pp)
类型名:类,结构体,类型定义(typedef),枚举:每个单词以大写字母开头,不包含下划线
class UrlTable{…
class UrlTableTester{…
struct UrlTableProperties{…
变量名:一律小写,单词间以下划线相连,类的成员变量以下划线结尾,全局变量应该少用,以g_为前缀。
常量:名称前加k后接大写字母开头的单词
普通函数:函数名以大写字母开头,每个单词首字母大写,没有下划线
存取函数:与存取变量名匹配
命名空间:全小写,基于项目名称和目录结构
枚举值:全大写,单词间以下划线相连
枚举名称:大小写混合,无下划线
宏命名:不推荐使用宏,命名参考枚举值
17.注释
文件注释:版权,许可版本,作者
类注释:每个类的定义要附着描述类的功能和用法注释
函数注释:函数声明出注释函数的功能,定义处描述函数实现
18.格式
行长度:一般不超过80字符,注释,url,路径,头文件保护除外
非ASCCII字符:尽量不要使用,使用必须是UTF-8格式
空格:只使用空格,每次缩进2个空格,设定tab转为空格
函数声明和定义:返回值类型和函数名同一行
左园括号总是和函数名在同一行
函数名和圆括号间没有间隔
左大括号总在最后一个参数同一行的末尾处
右大括号总是单独处于函数最后一行
右圆括号和左大括号间总是有一个空格
函数声明和实现处的所有形参名称必须一致
所有形参应尽可能对齐
条件语句:提倡不在括号中添加空格,关键字else另起一行
循环和开关选择语句:空循环体使用{}或continue
指针和引用表达式:访问成员时,句点或箭头前没有空格
指针操作符或&后没有空格
声明指针变量或参数时,*与变量名紧挨
布尔表达式:超过80字符,逻辑操作符位于行尾
函数返回值:return表达式中不要使用括号
变量及数组初始化:选择=还是()都可以 int x=3;int x(3)
预处理指令:不要缩进,从行首开始(即使在缩进代码块中)
类格式:声明public,protected,private,每次缩进1个空格
初始化列表:构造函数初始化列表放在同一行或者四格缩进并排几行