Table of Contents:

## c++编码规范

C++ Version

Currently, code should target C++17, i.e., should not use C++2x features.

 基于 C++ 11,C++ 17 旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以更简单地编写和维护代码。

工具设置

缩进 制表符大小=4 缩进大小=4
编码 no bom的UTF-8

头文件

1.使用#define保护

#ifndef __FOO_CLASS_H__
#define __FOO_CLASS_H__
...
#endif//__FOO_CLASS_H__

2.内联函数

建议低于10行函数才考虑inline

3.cpp文件#include顺序建议如下

4.类的前置声明

// #include <Hero> 尽量不要包含头文件,
class Hero; //下方前置声明
class Mon;
class Tri
{
    Mon* m;
    Hero* h;
}

其他的头文件规范:
- 避免多余的包含头文件
- 头文件应该是“自给自足的”
- 标准的头文件依赖的结构是树形的,若是存在环形图的结构,那就是自找麻烦了

头文件的影响
- 编译时间:对编译时间的影响可能是巨大的。
- 复杂性:不必要或笨拙的依赖关系会增加意外的复杂性。
- 重构/重组您的程序更加困难。
- 这使测试“模块”更难隔离。
- 文档:当您知道标头准确反映了文件中使用的内容时,此信息有助于理解代码。

注释

//========================================================================
// 名称: xx
// 功能简介:xx
// 作者:xx
// 修改时间:2015.02.05
//========================================================================



//========================================================================
// Name: pathplan.cpp
// Author: sunxvming
// Description: Grid-based map representation and path planning using the A* algorithm
// Modified: October 19, 2023
//========================================================================

命名空间

1.客户端使用 namespace xxx{} 命名空间包裹,xxx为本项目定义的命名空间
2.全局函数也封装于命名空间内
3.禁止使用using namespace xx; 建议使用using namespace LORD::FOO;类型

4.命名空间不要增加额外的缩进层次, 例如:

namespace {

void foo() {  // 正确. 命名空间内没有额外的缩进.
  ...
}

}  // namespace

5.声明嵌套命名空间时, 每个命名空间都独立成行.

namespace foo {
namespace bar {

1.仅仅有数据时使用struct,其他一律使用class
2.成员变量初始化顺序,声明顺序对应
3.头文件中一律不写任何方法实现的代码

其他C++

低效率写法

// 低效率 禁止使用
for (int i=0; i<1000; ++i)
{
    Foo f;
    f.DoSomething(i);
}
// 建议使用
Foo f;
for (int i=0; i<1000; ++i)
{
    f.DoSomething(i);
}

参考链接