C++的一些编程规范(基于google)

1.所有头文件都应该使用#define 防止头文件被多重包含,命名格式可以参考<PROJECT>_<PATH>_<FILE>_H

2.使用前置声明尽量减少.h文件中#include的数量,导致不必要的重新编译

详解:http://blog.csdn.net/justkong/article/details/9388733

3.函数参数:输入参数在前,输出参数在后。输入参数一般传值或常数引用,输出参数或输入输出参数为非常数指针。

4. .cpp头文件包含顺序

同名头文件

C系统文件

C++系统文件

其它库头文件

本项目内其它头文件

5.命名空间

(1)分为有名和无名的命名空间

(2)不能在命名空间的定义中声明子命名空间,不能在命名空间外使用"命名空间::子命名空间{}"的形式为子命名空间添加新成员。

a. namespace A

{

namespace B; //error

}

b. namespaceA{}

A::B{}; //error

namespaceA{

namespace B{} //right

}

(3)using指令和using声明

using指令:using namespace A;  //整个命名空间中的所有成员都可直接使用

using声明:using A::成员名  //只声明特定的成员

(4)一般来说,使用using声明会更安全。因为,using声明只导入指定的名称,如果该名称与局部名称发生冲突,编译器会报错。而using指令导入整个命名空间中的所有成员的名称,包括那些可能根本用不到的名称,如果其中有名称与局部名称发生冲突,则编译器并不会发出任何警告信息,而只是用局部名去自动覆盖命名空间中的同名成员。特别是命名空间的开放性,使得一个命名空间的成员,可能分散在多个地方,程序员难以准确知道,别人到底为该命名空间添加了哪些名称。

(5)可以为命名空间定义别名

namespace 别名 = 命名空间名;  //方便使用

6.局部变量

提倡在尽可能小的作用域中声明变量,离第一次使用越近越好,在声明变量时将其初始化

7.类中成员声明次序

(1)public,protected,private

(2)typedefs和enums

常量

构造函数

析构函数

成员函数

数据成员

8.使用C++的类型转换代替C语言的类型转换

(1)static_cast:和C风格转换相似可做值的强制转换,或者指针的子类到父类的明确的向上转换

(2)const_cast:移除const属性

(3)reinterpret_cast:指针类型和整形,或者其他指针间不安全的转换,仅在你对你所做的一切了然于心时使用

(4)dynamic_cast:运行时类型检查,指针的父类到子类的转换

详见http://blog.csdn.net/justkong/article/details/8044662

9.使用前置自增代替后置自增,后置自增要多一次拷贝

10.尽可能多的使用const

上一篇:C# Firefox Session Manager 文件的导出与管理


下一篇:云服务和虚拟机的预留 IP 地址