命名空间

  • 鼓励在 .cc 文件内使用匿名命名空间或 static 声明.
  • 使用具名的命名空间时, 其名称可基于项目名或相对路径.
  • 禁止使用 using 指示(using-directive)。
  • 禁止使用内联命名空间(inline namespace)。
  • 不要在头文件中使用 命名空间别名 除非显式标记内部命名空间使用。

匿名命名空间和静态变量

在 .cc 文件中定义一个不需要被外部引用的变量时,可以将它们放在匿名命名空间或声明为 static 。但是不要在 .h 文件中这么做。

非成员函数、静态成员函数和全局函数

使用静态成员函数或命名空间内的非成员函数, 尽量不要用裸的全局函数. 将一系列函数直接置于命名空间中,不要用类的静态方法模拟出命名空间的效果,类的静态方法应当和类的实例或静态数据紧密相关

局部变量

将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化. 有一个例外, 如果变量是一个对象, 每次进入作用域都要调用其构造函数, 每次退出作用域都要调用其析构函数. 这会导致效率降低.

静态和全局变量

禁止定义静态储存周期非POD变量,禁止使用含有副作用的函数初始化POD全局变量,因为多编译单元中的静态变量执行时的构造和析构顺序是未明确的,这将导致代码的不可移植。