C++编程规范 1-3章

第1章 命名原则

1.类型名:每个英文单词的第一个字母大写,其他小写,最后以_T结尾。

class PageCode_T
{
	//...
};

原因:

  1. 防止与变量名冲突
  2. 使得类型名更加清晰
  3. 区分名字中各单词也可以用下划线
  4. 缩写字当作普通字处理
  5. 因为namespace是表示一个逻辑组,与class和enum的某些用法类似,所以采用同样的命名原则

1.2 关于变量和函数名:首字母小写,其后每个单词的第一个字母大写。

int lengthAndWidth(void) const;

1.3 全大写的函数名(建议):调用普通函数的函数

  1. 阅读简洁
  2. 跟原函数只有大小写的区别
  3. 效率高,可用inline方式实现这类函数

1.4关于宏,常量和模板名:全部大写,如有多个单词,用下划线分隔。

#define PI 3.1415926
enum{BLUE,RED,WHITE};
template<class TYPE>
class List_T
{
	//...
};

1.5关于指针标识符名:建议以p开头或以Ptr结尾

char *pName;

1.6关于变量名前缀:
i_ 类内数据成员 instance scope
c_ 类内静态数据成员 class scope
g_ 全局变量 global scope
f_ 文件作用域变量 file scope

1.7减少匿名命名空间级标识符:可以归类放在某个命名空间、类或函数中
原因:

  1. 明显减少命名冲突
  2. 归类后使用更清晰
  3. 缩短生命周期

1.8名字要本着清楚、简单的原则:帮助对代码的理解

int returnStatus;
int alarmNumber;

1.9关于函数的左值和右值参数名:用lhs做左值参数的名字,用rhs做右值参数的名字

int operator=(String const &lhs,String const &rhs);

第2章 类型的使用

1.避免隐式声明类型

main();		//int main(void)
void foo(const aValue);		//void foo(const int aValue);

2.慎用无符号类型:不同的C++标准中有符号和无符号的转换规则不同

3.少用浮点数除非必须

  1. 浮点数不精确
  2. 浮点数的异常处理复杂
  3. 运算速度慢

4.用typedef简化程序中的复杂语法

5.少用union

6.慎用位操作

  1. 效率低下
  2. 可能带来兼容性问题

7.用enum取代常量

  1. 易于维护
  2. 比#define或 int const更安全
  3. 在类中使用更方便
  4. 减少匿名命名空间级变量、常量、宏及函数

8.使用内置bool类型:只有true和false

9.尽量用引用取代指针

  1. 被引用的对象永远不可能是空
  2. 引用某一个对象后不会再去引用其他对象
  3. 某些operator函数的返回值
  4. 函数的参数传递

第3章 函数

1.函数原型声明放在一个头文件中

2.函数无参数一定要用void标注

3.对于内置类型参数应传值

4.对于非内置类型参数应传递引用或指针

  1. 不用拷贝
  2. 不用构造和析构
  3. 有利于非内置类型的扩充
  4. 有利于函数支持派生类

5.何时用指针传递参数:取舍的关键是:NULL是否是一个合法的取值

  • 函数内部将自己的参数以指针形式传给其他的函数
  • 若参数是被new出来的,且将要在函数内被释放

6.避免使用参数不确定的函数:可以使用重载和链式函数

7.若不得不使用参数不确定的函数,用<stdarg.h>提供的方法

va_list
va_start
va_end

8.避免函数的参数过多

9.尽量保持函数只有一个出口

10.(非void)任何情况都要有返回值

11.返回指针类型的函数应该用NULL表示失败

12.禁止成员函数返回成员(可读写)的引用或指针

13.重复使用的code用function代替

14.虚友元函数:把友元函数定义成虚函数,子类继承该友元接口而无需重复声明友元

猜你喜欢

转载自blog.csdn.net/a12345d132/article/details/85047355