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

来源:互联网 发布:幼儿弱视训练软件 编辑:程序博客网 时间:2024/06/04 23:20

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