一、标识符基本规则(语言强制要求)

  1. 组成规则

    • 允许字符:字母(a-z, A-Z)、数字(0-9)、下划线(_)
    • 首字符限制:不能以数字开头
    • 大小写敏感:myVarmyvar 是不同的标识符
    • 长度限制:理论上无限制(但编译器通常有实际限制)
  2. 禁止关键字

    int class = 5;      // 错误!class是关键字
    double return = 1.0; // 错误!return是关键字
    
  3. 特殊保留名

    • 避免使用双下划线开头:__reserved(编译器保留)
    • 避免单下划线加大写字母:_Reserved(系统保留)
    • 避免用下划线开头全局变量:_count(可能冲突)

二、主流命名规范(最佳实践)

通用原则
  • 清晰表达意图employeeCount ✓ vs ecnt
  • 保持一致性:项目内统一风格
  • 避免缩写歧义buf (buffer) 可接受,bff (?) 不可接受
  • 拒绝拼音混合shuju_count(数据)✗
常用风格规范表
类别 推荐风格 示例 适用场景
变量/函数 snake_case user_count 推荐通用
camelCase itemPrice Qt/MFC项目
类/结构体 PascalCase StringParser 面向对象
常量 UPPER_CASE MAX_SIZE 全局常量
成员变量 尾部下划线 count_ 区分局部变量
私有成员 m_前缀 m_isValid 某些框架
宏定义 全大写+下划线 LOG_ERROR() 仅宏使用

三、分项命名规范详解

1. 变量命名
// 推荐
std::vector<Student> student_list;  // 容器类使用复数
int buffer_size = 1024;             // 描述清楚
auto connection_count = 0;          // 类型自动推导

// 避免
int n; // 无意义
int usrN; // 含糊缩写
2. 函数命名
// 动词开头,表达动作
void calculate_tax();
std::string get_user_name();
bool validate_input();

// 避免形容词命名
void good(); // ✗ 意义不明确
void fast(); // ✗ 主观概念
3. 类/结构体命名
class NetworkController {  // 名词+业务含义
public:
    void start_service();
private:
    int connection_count_;
};

struct Point3D { // 简单数据集合
    float x;
    float y;
    float z;
};
4. 枚举命名
// 传统枚举(容易污染命名空间)
enum Colors { RED, GREEN, BLUE };
int RED = 0; // 冲突!✗

// C++11 强类型枚举(推荐)
enum class FileStatus { 
    OPENED, 
    CLOSED, 
    ERROR 
};

auto status = FileStatus::OPENED; // 安全访问

四、特殊场景规范

  1. 指针/引用标识

    // 明确指针类型
    Document* active_document_ptr = nullptr; 
    // 标识引用
    const Config& global_config_ref = get_config();
    
  2. 布尔变量特殊前缀

    bool is_valid = false;
    bool has_buffer = true;
    bool enable_logging = true;
    
  3. 项目结构一致性

    • 头文件:network_service.hpp
    • 源文件:network_service.cpp
    • 类定义:class NetworkService
    • 成员函数:ServiceResult start()

五、跨平台注意事项

  1. 大小写敏感

    // Windows可能忽略大小写,Unix严格区分
    openFile() ≠ openfile() // Unix平台会报错
    
  2. 文件名限制

    • 避免空格:My Project.cpp
    • 避免特殊字符:@#$%

六、现代C++命名实践

  1. auto类型推导命名

    // 保持描述性
    auto employee_list = get_employees(); // ✓ 明显容器类型
    auto ptr = func();                    // ✗ 丢失类型信息
    
  2. lambda表达式命名

    // 复杂lambda命名提高可读性
    auto data_processor = [](const DataPacket& packet) {
        // 处理逻辑...
    };
    
  3. 概念约束命名

    template<typename T>
    concept Numerical = std::integral<T> || std::floating_point<T>;
    // 概念名清晰表达约束
    

黄金原则总结:

  1. 可读性高于简洁性:宁可稍长也要清晰
  2. 项目风格统一优先:即使不符合个人习惯
  3. 避免神秘主义命名:他人无需上下文即可理解
  4. 类型信息内嵌命名:如 timeout_ms(毫秒)、buffer_size_bytes
  5. 编译器强制规则必须遵守,规范建议尽可能遵守
posted on 2025-06-27 16:08  青·丝  阅读(118)  评论(0)    收藏  举报