禁止class类型的全局变量,多线程代码中禁止非常数全局变量,禁止使用函数返回值初始化全局变量。 class类型的全局变量内部构造、析构等初始化操作每次生成有可能变化,从而导致难以发现的bugs。 因此,禁止使用class类型的全局变量(包括STL中的string、vector等等)。 全局的字符串常量,使用C风格的字符串,不要使用STL的string。 注意: 静态成员变量视为全局变量,也不能是class类型。 总结: (1) .cc中的不具名命名空间可避免命名冲突且限定作用域,避免使用using提示符污染命名空间; (2) 嵌套类符合局部使用原则,可惜不能再其他头文件前置声明,尽量不要public; (3) 尽量不用全局函数和全局变量,考虑作用域和命名空间限制,尽量单独形成编译单元; (4) 多线程中的全局变量不要使用class类型(含STL容器),避免不明确行为导致的bugs; 作用域的使用,除了考虑名称污染、可读性外,主要是为了降低耦合度,提高编译、执行效率。