谷歌开源项目风格指南笔记(上)
来源:互联网 发布:重庆知行科技学校 编辑:程序博客网 时间:2024/06/10 03:53
一 头文件
1. self_contained 头文件
头文件包含所有需要的头文件,且不包含不必要的头文件和符号
2. 加define 保护,防止重复引用此头文件
define的规则为
#define <PROJECT>_<PATH>_<FILE>_H
3. 前置声明可以减少头文件依赖,
3.1尽量避免.前置声明定义在其他项目内的实体
3.2 函数总是用#include
3.3 类尽量用#include
4. 函数代码小于10行使用内联函数,析构函数别用,因为析构函数内包含很多对象释放的代码。
5. #include 路径顺序
5.1
dir2/foo2.h
(优先位置, 详情如下) 5.2 C 系统文件
5.3 C++ 系统文件
5.4 其他库的
.h
文件 5.5 本项目内
.h
文件二 作用域
1)
1. 禁止使用内联命名空间
2. 在c文件允许甚至鼓励使用匿名命名空间
3. 引用其他名字空间的类
namespace a { class A; } // a::A 的前置声明
4. 不要在命名空间std内声明任何东西
5. 最好不要使用using 从而使得所有命名空间的内容可以正常使用
6. 在cc文件中,函数,方法,类中可以使用using
2)
class Foo {
private:
// Bar是嵌套在Foo中的成员类
class Bar {
…
};
};
private:
// Bar是嵌套在Foo中的成员类
class Bar {
…
};
};
嵌套类: 只给外部类使用,防止类名污染,在.h 从前置声明,在.cc中定义
3)某些情况下, 非成员函数和静态成员函数是非常有用的, 将非成员函数放在名字空间内可避免污染全局作用域.
将非成员函数和静态成员函数作为新类的成员或许更有意义, 当它们需要访问外部资源或具有重要的依赖关系时更是如此.
4)将变量尽可能置于最小作用域内,并在变量声明时进行初始化。
如果变量是一个对象,每次进入作用域都要调用构造函数,每次退出作用域都要调用析构函数
5)只允许原生数据类型(int double)的全局变量和静态变量
6) namespace的使用除了考虑命名污染,可读性之外,主要为了降低耦合,提高编译和执行效率
三 类
不要在构造函数中进行复杂的初始化 (尤其是那些有可能失败或者需要调用虚函数的初始化).
如果类中定义了成员变量, 则必须在类中为每个类提供初始化函数或定义一个构造函数. 若未声明构造函数, 则编译器会生成一个默认的构造函数, 这有可能导致某些成员未被初始化或被初始化为不恰当的值.
对单个参数的构造函数使用 C++ 关键字
explicit
.2个例外 拷贝构造函数, 作为其他类的透明包装类
如果你的类型需要, 就让它们支持拷贝 / 移动. 否则, 就把隐式产生的拷贝和移动函数禁用.
在能够减少重复代码的情况下使用委派和继承构造函数.
仅当只有数据时使用 struct, 其它一概使用 class.
在类中使用特定的声明顺序:
public:
在 private:
之前, 成员函数在数据成员 (变量) 前;将 所有 数据成员声明为 private
, 并根据需要提供相应的存取函数. 例如, 某个名为 foo_
的变量, 其取值函数是 foo()
. 还可能需要一个赋值函数 set_foo()
.
特例是, 静态常量数据成员 (一般写做 kFoo) 不需要是私有成员.
一般在头文件中把存取函数定义成内联函数.
四 谷歌奇技
动态分配出的对象最好有单一且固定的所有主(onwer), 且通过智能指针传递所有权(ownership).
使用
cpplint.py
检查风格错误. 0 0
- 谷歌开源项目风格指南笔记(上)
- 笔记-Google开源项目风格指南
- python 风格指南笔记
- Google 开源项目风格指南--C++ 风格指南
- GitHub上star超过2k的安卓项目和代码风格指南
- Google 开源项目风格指南阅读笔记(C++版)
- Google 开源项目风格指南
- Google 开源项目风格指南 (中文版)
- Google 开源项目风格指南
- Google C++开源项目风格指南
- google开源项目编程风格指南
- Google 开源项目风格指南
- Google 开源项目风格指南 (中文版)
- Google 开源项目风格指南
- Google 开源项目风格指南
- Google 开源项目风格指南
- Google开源项目风格指南
- Google 开源项目风格指南 (中文版)
- Shiro-散列算法
- *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
- 编译安装php扩展fileinfo
- js 里 escape,encodeURI,encodeURIComponent编码方法之我见
- Hibernate事务与并发问题处理(悲观锁与乐观锁)
- 谷歌开源项目风格指南笔记(上)
- AndroidManifest.xml文件详解
- 【6】旋转数组 的最小数字
- js同源策略
- http协议响应状态码大全以及常用状态码
- 最接近的数
- Cloudera:Hue监控页面的时间显示问题
- 分类算法中的ROC与PR指标
- UNIX/Linux系统取证之信息采集案例