C++ 编程规范指南

高效、可维护、团队友好的C++开发实践

命名规范

基本原则

  • 使用描述性名称,避免缩写
  • 遵循驼峰命名法或下划线命名法,保持一致性
  • 宏和枚举值使用全大写加下划线

示例:

// 变量命名
int studentCount;          // 驼峰式
double average_score;      // 下划线式

// 类命名
class DataProcessor;       // 帕斯卡命名法

// 常量命名
const int MAX_RETRIES = 5;

格式规范

基本原则

  • 使用4空格缩进,避免制表符
  • 大括号使用Allman风格(单独一行)
  • 每行代码不超过120个字符
  • 操作符周围添加空格

示例:

// 正确格式
void processData(const vector<int>& data)
{
    if (data.empty())
    {
        return;
    }
    
    for (auto& item : data)
    {
        item = transform(item * 2 + 5);
    }
}

函数设计

基本原则

  • 函数不超过50行(理想情况不超过20行)
  • 参数不超过5个,过多时使用结构体封装
  • 避免输出参数,优先使用返回值
  • 使用const引用传递大型对象

示例:

// 良好设计的函数
std::string formatName(const std::string& firstName, 
                       const std::string& lastName)
{
    return lastName + ", " + firstName;
}

// 避免
void calculateResults(const DataSet& data, 
                      ResultContainer& outResults);

类与对象

基本原则

  • 遵循RAII原则(资源获取即初始化)
  • 类成员变量使用m_前缀或下划线后缀
  • 公开接口使用PascalCase,私有成员使用camelCase
  • 优先使用组合而不是继承

示例:

class FileHandler
{
public:
    explicit FileHandler(const std::string& filename)
        : m_filename(filename)
    {
        m_file.open(filename);
    }
    
    ~FileHandler()
    {
        if (m_file.is_open()) 
        {
            m_file.close();
        }
    }
    
    std::string readAll()
    {
        // 读取文件内容
    }
    
private:
    std::string m_filename;
    std::ifstream m_file;
};

内存管理

基本原则

  • 优先使用智能指针(unique_ptr/shared_ptr)
  • 避免使用裸new/delete
  • 使用RAII管理所有资源
  • 禁止返回裸指针或引用指向局部对象

示例:

// 使用智能指针
auto dataProcessor = std::make_unique<DataProcessor>();

// 传递所有权
std::unique_ptr<Result> process()
{
    auto result = std::make_unique<Result>();
    // 处理结果
    return result;
}

// 避免
int* createArray(int size)
{
    return new int[size];  // 调用者必须记得delete[]
}