C++编程规范学习(整理)

来源:互联网 发布:python netsnmp 实例 编辑:程序博客网 时间:2024/05/15 23:35
命名——字母混合型(MyClass) 或 下划线命名(num_err)。
通过名字可以了解意思;类型/变量-》名词;函数-》动词。

文件名:小写 + 下划线, .h和.cpp基本上一一对应,若inline函数多则单独成为 -inl.h文件。
类型名:字母混合型(MyClass)。 纯虚类(接口)在后面 + interface。
变量名:下划线命名(num_err),类成员变量以“_”结尾,全局变量以“g_"开头。
常量名:字母混合型,以“k”开头(包括enum常量)。 #define 的常量,则大写 + “_”。
函数名:下划线命名,如set_...., get_.....。
名字空间:小写下划线,项目_模块

注释://(单行) 或 /**/(多行),文件注释,函数在声明中注释。  //TODO, //FIXME。
空格/缩进:二元操作符前后空格,关键字 if/for/while/switch/do 后面加空格。分隔符后加空格,“()”不加空格。Namespace和预处理不缩进。
折行/空行:‘}’单独占用一行;函数的‘{’要换行,单独占用一行;函数内的块‘ { ’不换行。

头文件:
     1、为防止多重包含,要用 ifndef, define, endif,用项目_模块_头文件名定义;
     2、降低耦合度,减少头文件修改后重新编译文件的数目;
     3、包含顺序:Clib, C++lib, 第三方lib,项目头文件;
     4、Inline函数只能少于10行;包含循环和递归的不能inline;虚函数和析构函数不能inline;
     5、函数参数顺序:先Input,后output。
    
作用域:
     1、嵌套类不能是public(除interface);
     2、尽量不要使用全局变量,尽量使用名字空间内的非成员函数或静态成员函数;
     3、局部变量尽量置于其最小作用域内;在用的地方声明并初始化;(恶意修改,循环时注意效率)
     4、禁止使用静态或全局的Class Type变量;如要使用全局,只能是内建支持类型,如int, float, char等。
    
类:
     1、不使用默认构造函数,若构造函数复杂,则单独分出函数init();
     2、单参数的构造函数要显示explicit声明,防止隐式转换;
     3、用DISALLOW_COPY_AND_ASSIGN防止Copy constructor和 assign constructor;
     4、简单情况用struct,复杂用class,两者在默认权限中不一样;
     5、能用组合,则不用继承;不适用多重继承(接口类除外);
     6、Typedef, enum -> constants(static const data members) -> constructor ->destructor -> Methods -> data members。
    
C++其它特性:
     1、尽量用const传参,输出指针;
     2、尽量不要运算符重载;
     3、使用stdint.h的int32_t或int64_t,来屏蔽机器的不同位数;
     4、尽量以enum,const常数或内联函数替代宏定义;
     5、不适用RTTI和Exception。