命名规范

### C++ 命名规范

C++ 命名规范有助于提高代码可读性、可维护性和团队协作效率。下面是常见的 C++ 命名规范建议，分为多个维度：

---

### 🧱 一、基础命名风格

| 类型              | 命名风格                                                       | 示例                                                                       |
| ----------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------- |
| **变量**          | `lowerCamelCase`                                               | `userName`, `totalCount`                                                   |
| **函数**          | `lowerCamelCase`                                               | `calculateTotal()`, `printReport()`                                        |
| **类 / 结构体**   | `UpperCamelCase`（PascalCase）                                 | `User`, `AccountManager`                                                   |
| **常量 / 宏定义** | `ALL_CAPS_WITH_UNDERSCORES`                                    | `MAX_BUFFER_SIZE`, `PI`                                                    |
| **命名空间**      | `lowercase_with_underscores` 或 `CamelCase`                    | `network_utils`, `MyProject`                                               |
| **枚举类型**      | `UpperCamelCase`（类名） + 枚举值 `UPPER_CASE` 或 `kCamelCase` | `enum class Color { RED, GREEN };` 或 `enum class Color { kRed, kGreen };` |
| **模板类型参数**  | `PascalCase`                                                   | `template<typename T>`                                                     |
| **私有成员变量**  | `m_` 前缀或 `_` 后缀                                           | `m_value` 或 `value_`                                                      |
| **静态成员变量**  | `s_` 前缀                                                      | `s_instance`                                                               |

---

### 📦 二、作用域相关命名

- **避免使用全局变量**，推荐封装到命名空间或类中。
- 命名空间应避免与标准库命名冲突，例如不要叫 `std`、`string` 等。
- 使用命名空间分组功能模块，例如：

  ```cpp
  namespace app {
    namespace logging {
      void logInfo(const std::string&);
    }
  }
  ```

---

### 📘 三、类与成员命名建议

- 类名是名词，表示一个事物（如 `User`, `DatabaseConnection`）。
- 方法名是动词或动词短语（如 `loadData()`, `sendRequest()`）。
- 构造函数和析构函数使用类名命名，如 `User()` 和 `~User()`。
- 避免无意义缩写：`clntMgr` → `clientManager`

---

### 💡 四、枚举建议

#### 方式一：传统枚举（C++98 风格）

```cpp
enum Color {
  COLOR_RED,
  COLOR_GREEN,
  COLOR_BLUE
};
```

#### 方式二：强类型枚举（C++11 `enum class`，推荐）

```cpp
enum class Color {
  Red,
  Green,
  Blue
};
Color c = Color::Red;
```

> ✅ 推荐使用 `enum class` 来避免命名污染

---

### 🔐 五、文件和命名约定

| 类型                           | 示例                               |
| ------------------------------ | ---------------------------------- |
| `.h/.hpp` 文件                 | `user_manager.h`, `math_utils.hpp` |
| `.cpp` 文件                    | `user_manager.cpp`                 |
| include guard（C++11 前）      | `#ifndef USER_MANAGER_H`           |
| `#pragma once`（C++11+，推荐） | 顶部写 `#pragma once`              |

---

### 🧼 六、命名习惯建议

- 避免单字符变量（除 `i`, `j` 等循环计数）
- 尽量语义明确，比如 `dataBuffer` 比 `buf` 更清晰
- 不要过度缩写，`numEmployees` 优于 `numEmp`

---

### 🧰 七、团队风格标准（建议）

可参考主流项目的命名规范，例如：

- **Google C++ Style Guide**: [https://google.github.io/styleguide/cppguide.html](https://google.github.io/styleguide/cppguide.html)
- **LLVM Coding Standards**
- **Qt 命名风格**（变量带 `_` 后缀，如 `value_`）
