谷歌代码规范笔记

谷歌代码规范 C++ 笔记

原文:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/headers/

1.减小前置声明的使用,尽量使用#include
2.只有当函数只有 10 行甚至更少时才将其定义为内联函数.,包含循环,switch等不适合用内联函数
3.#include包含头文件有一点顺序,具体顺序如下:
  1. cpp 文件主要用作实现或测试时的测试头文件
  2. C系统文件
  3. C++系统文件
  4. 其他库的.h文件
  5. 本项目内.h文件
4 .鼓励在 .cc 文件内使用匿名命名空间或 static 声明. 使用具名的命名空间时, 其名称可基于项目名或相对路径. 禁止使用 using 指示(using-directive)。禁止使用内联命名空间(inline namespace)。在命名空间最后注释命名空间名字,注意减少缩进,增加代码的美观
// .h 文件
namespace mynamespace {

// 所有声明都置于命名空间中
// 注意不要使用缩进
class MyClass {
    public:
    ...
    void Foo();
};

} // namespace mynamespace
// .cc 文件
namespace mynamespace {

// 函数定义都置于命名空间中
void MyClass::Foo() {
    ...
}

} // namespace mynamespace

在命名空间时,不应该使用 using 指示 引入整个命名空间的标识符号。

// 禁止 —— 污染命名空间
using namespace foo;

不要在头文件中使用 命名空间别名 除非显式标记内部命名空间使用。因为任何在头文件中引入的命名空间都会成为公开API的一部分。
禁止用内联命名空间

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

在命名空间中函数尽量不使用静态

namespace myproject {
namespace foo_bar {
void Function1();
void Function2();
}  // namespace foo_bar
}  // namespace myproject```
6.将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化.

少在循环中声明变量

7.尽量不用全局函数和全局变量, 考虑作用域和命名空间限制, 尽量单独形成编译单元;
8.不要定义隐式类型转换. 对于转换运算符和单参数构造函数, 请使用 explicit 关键字.
9.只有成员函数时使用struct,其他使用class
10. 所有继承必须是public,如果想使用私有继承,应该把基类的实例替换成成员对象的方式。
11. 函数的参数顺序为:输入参数在先,后跟输出参数
12.在引用参数传递的参数上加上 const

事实上这在 Google Code 是一个硬性约定: 输入参数是值参或 const 引用, 输出参数为指针. 输入参数可以是 const 指针, 但决不能是非 const 的引用参数, 除非特殊要求,

13.智能指针使用

智能指针是一个通过重载 * 和 -> 运算符以表现得如指针一样的类. 智能指针类型被用来自动化所有权的登记工作, 来确保执行销毁义务到位. std::unique_ptr 是 C++11 新推出的一种智能指针类型, 用来表示动态分配出的对象的独一无二的所有权; 当 std::unique_ptr 离开作用域时, 对象就会被销毁. std::unique_ptr 不能被复制, 但可以把它移动(move)给新所有主. std::shared_ptr 同样表示动态分配对象的所有权, 但可以被共享, 也可以被复制; 对象的所有权由所有复制者共同拥有, 最后一个复制者被销毁时, 对象也会随着被销毁.
如果没有很好的理由, 则不要使用共享所有权. 这里的理由可以是为了避免开销昂贵的拷贝操作, 但是只有当性能提升非常明显, 并且操作的对象是不可变的(比如说 std::shared_ptr )时候, 才能这么做. 如果确实要使用共享所有权, 建议于使用 std::shared_ptr

14. 不推荐使用异常
15.类型转换

使用 C++ 的类型转换, 如 static_cast<>(). 不要使用 int y = (int)x 或 int y = int(x) 等转换方式;

发布了74 篇原创文章 · 获赞 93 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_25819827/article/details/99692616