Google C++代码风格指南翻译简化版(google c++ code style guide)【二】

Google 编程规范本地化、简化。如有需要,可参考 Google C++ code style guide原文:
http://google.github.io/styleguide/cppguide.html

本文档基于网上流传的 Google C++编程风格指南,由 edisonpeng(2009/3/25)整理

本地化简化由MISAS开发团队使用。在此分享以供各开发团队参考。

目录

@[toc]

作用域

命名空间

在.cc文件中,提倡使用不具名命名空间。如果使用具名命名空间,基于项目或路径名称而不是using指示符。命名空间内不用缩进。

定义:
命名空间将全局作用域细分为不同的具名作用局,可有效防止全局作用局的命名冲突。

优点:
命名空间的命名轴线可嵌套。父级命名不同时即使当前命名重复也不会冲突。

缺点:不具名命名空间容易违背C++中唯一定义的原则。

结论:合理使用

嵌套类

不要将嵌套类定义为public,除非是接口的一部分。

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

使用命名空间内的非成员函数和静态成员函数,尽量不使用全局函数。

局部变量

将函数变量尽可能至于最小作用域内,在声明变量时将其初始化。

C++允许在函数的任何位置声明变量,提倡在尽可能小的作用域中声明变量,离第一次使用越近越好。这样代码易于阅读且易于定位变量的声明位置、变量类型和初始值。特别是,应使用初始化代替声明+赋值的方式。

全局变量

禁止class类型的全局变量,多线程代码中禁止非常数全局变量,禁止使用函数返回值初始化全局变量。

class类型的全局变量内部构造、析构等初始化操作每次生成有可能变化,从而导致难以发现的bugs。

因此,禁止使用class类型的全局变量(包括STL中的string、vector等等)。

全局的字符串常量,使用C风格的字符串,不要使用STL的string。

注意: 静态成员变量视为全局变量,也不能是class类型。

总结:

(1) .cc中的不具名命名空间可避免命名冲突且限定作用域,避免使用using提示符污染命名空间;

(2) 嵌套类符合局部使用原则,可惜不能再其他头文件前置声明,尽量不要public;

(3) 尽量不用全局函数和全局变量,考虑作用域和命名空间限制,尽量单独形成编译单元;

(4) 多线程中的全局变量不要使用class类型(含STL容器),避免不明确行为导致的bugs

作用域的使用,除了考虑名称污染、可读性外,主要是为了降低耦合度,提高编译、执行效率。

版权声明

弈心博客


本文首发site_name,转载请附上博文链接!