当前位置: 首页 > article >正文

c++ 命名规则

目录

    • 总结
    • 1. 类名(Class Names)
    • 2. 变量名(Variable Names)
    • 3. 函数名(Function Names)
    • 4. 宏定义(Macros)
    • 5. 命名空间(Namespaces)
    • 6. 枚举(Enums)和枚举值(Enum Values)
    • 7. 文件名(File Names)
    • 8. 模板参数(Template Parameters)
    • 9. 其他注意事项

总结

总结
类名:大驼峰法(PascalCase)。
变量/函数名:小驼峰法(camelCase)。
全局常量:使用全大写字母加下划线分隔(SNAKE_CASE)。
常量/宏:全大写加下划线(SNAKE_CASE)。
静态成员变量:可加前缀s_或后缀_(团队约定)
命名空间/文件:全小写,可加下划线

在C++编程中,良好的命名规则对于代码的可读性、可维护性和团队协作至关重要。以下是C++中常见的命名规则和最佳实践,按不同标识符类型分类说明:

1. 类名(Class Names)

规则:使用大驼峰命名法(PascalCase),即每个单词的首字母大写,无下划线。

class StudentRecord;
class BankAccountManager;

理由:类名通常代表抽象概念,大驼峰法能清晰区分类与其他标识符。

2. 变量名(Variable Names)

规则:使用小驼峰命名法(camelCase),即首字母小写,后续单词首字母大写。

int studentCount;
double averageScore;

全局常量:使用全大写字母加下划线分隔(SNAKE_CASE)。
const int MAX_STUDENTS = 100;

静态成员变量:可加前缀s_或后缀_(团队约定)。
class Example {

static int s_counter; // 或 static int counter_;
};

3. 函数名(Function Names)

规则:使用小驼峰命名法,动词开头描述行为。

void calculateAverage();
bool isValidInput(const std::string& input);

理由:函数名应明确表达其功能,动词开头有助于理解。

4. 宏定义(Macros)

规则:使用全大写字母加下划线分隔(SNAKE_CASE),并避免与现有标识符冲突。

#define PI 3.14159
#define MAX_BUFFER_SIZE 1024

注意:C++中推荐使用constexpr替代宏定义常量。

5. 命名空间(Namespaces)

规则:使用全小写字母,可加下划线分隔(团队约定)。
namespace company_name {namespace project_name {// ...}
}

理由:避免与类名冲突,保持简洁。

6. 枚举(Enums)和枚举值(Enum Values)

规则:
枚举类型名:使用大驼峰法。
枚举值:使用全大写字母加下划线分隔。

enum class Color { RED, GREEN, BLUE };  // C++11风格
enum ErrorCode { SUCCESS = 0, FILE_NOT_FOUND = 1 };

7. 文件名(File Names)

规则:使用全小写字母,可加下划线或连字符(根据团队约定)。

示例:
student_record.h(头文件)
student_record.cpp(源文件)

理由:保持与类名或模块名的一致性。

8. 模板参数(Template Parameters)

规则:使用大写字母(通常为单字母或简短名称)。
示例:

template <typename T, size_t N>
class Array { /* ... */ };

9. 其他注意事项

避免缩写:除非是广泛认可的缩写(如HTTP、IO)。
一致性:团队内统一命名风格(如是否使用匈牙利命名法)。
描述性:名称应准确反映用途,避免temp、data等模糊名称。
避免保留字:不要使用C++关键字(如class、new)作为标识符。

http://www.lryc.cn/news/2400595.html

相关文章:

  • GRU 参数梯度推导与梯度消失分析
  • 针对KG的神经符号集成综述 两篇
  • RabbitMQ和MQTT区别与应用
  • Vue跨层级通信
  • docker常见命令行用法
  • Axure设计案例:滑动拼图解锁
  • MySQL权限详解
  • 基于BP神经网络的语音特征信号分类
  • 解决fastadmin、uniapp打包上线H5项目路由冲突问题
  • web3-区块链的交互性以及编程的角度看待智能合约
  • 数据结构(7)—— 二叉树(1)
  • ROS1和ROS2的区别autoware.ai和autoware.universe的区别
  • 如何使用 Docker 部署grafana和loki收集vllm日志?
  • Kafka入门- 基础命令操作指南
  • 目标检测我来惹1 R-CNN
  • lua的笔记记录
  • 智能进化论:AI必须跨越的四大认知鸿沟
  • L2-056 被n整除的n位数 - java
  • 传统足浴行业数字化转型:线上预约平台的技术架构与商业逻辑
  • Java-IO流之字节输入流详解
  • 从OCR到Document Parsing,AI时代的非结构化数据处理发生了什么改变?
  • 【C/C++】入门grpc的idl
  • 【Java实用工具类】手撸SqlBuilder工具类,优雅拼接动态SQL,MyBatisPlus同款风格!
  • 宇树科技更名“股份有限公司”深度解析:机器人企业IPO前奏与资本化路径
  • Inno Setup 安装向导各个页面详解
  • 转战web3远程工作的英语学习的路线规划
  • OPENCV重点结构体Mat的讲解
  • Java 创建线程池的几种方式
  • 【趣味Html】第11课:动态闪烁发光粒子五角星
  • AnyIO Event:异步编程中的同步利器