命名空间
- 鼓励在 .cc 文件内使用匿名命名空间或 static 声明.
- 使用具名的命名空间时, 其名称可基于项目名或相对路径.
- 禁止使用 using 指示(using-directive)。
- 禁止使用内联命名空间(inline namespace)。
- 不要在头文件中使用 命名空间别名 除非显式标记内部命名空间使用。
匿名命名空间和静态变量
在 .cc 文件中定义一个不需要被外部引用的变量时,可以将它们放在匿名命名空间或声明为 static 。但是不要在 .h 文件中这么做。
非成员函数、静态成员函数和全局函数
使用静态成员函数或命名空间内的非成员函数, 尽量不要用裸的全局函数. 将一系列函数直接置于命名空间中,不要用类的静态方法模拟出命名空间的效果,类的静态方法应当和类的实例或静态数据紧密相关
局部变量
将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化. 有一个例外, 如果变量是一个对象, 每次进入作用域都要调用其构造函数, 每次退出作用域都要调用其析构函数. 这会导致效率降低.
静态和全局变量
禁止定义静态储存周期非POD变量,禁止使用含有副作用的函数初始化POD全局变量,因为多编译单元中的静态变量执行时的构造和析构顺序是未明确的,这将导致代码的不可移植。