提升C++代码质量的一些建议
文章目录
- 1. 命名清晰
- 2. 简洁性
- 3. 一致性
- 4. 注释
- 5. 避免复杂性
- 6. 重构
- 7. 测试
- 8. 错误处理
- 9. 文档
- 10. 代码复用
- 11. 性能优化
- 12. 安全性
- - 代码规范推荐
C++开发中,写出优雅且可维护的代码不仅能提升代码质量,还能提高团队协作效率和项目长期的可扩展性。以下是根据你的描述,为这些代码规范进行的详细解析,并结合实际C++开发中的好味道和坏味道,提供相应的最佳实践。
- 命名清晰
- 简洁性
- 一致性
- 注释
- 避免复杂性
- 重构
- 测试
- 错误处理
- 文档
- 代码复用
- 性能优化
- 安全性
1. 命名清晰
好味道:
- 使用有意义的、描述性强的命名,使代码可以自我解释。比如:
函数名int calculate_total_price(int item_count, int item_price);calculate_total_price和参数名item_count,item_price一看就明白这个函数的意图。
坏味道:
- 使用缩写或不清楚的名称:
这里的int ct_pr(int c, int p);ct_pr,c,p都不清楚具体含义,增加了阅读成本。
最佳实践:
- 命名应遵循一定的规则,如驼峰命名法或下划线命名法,并保持项目中命名的一致性。命名应避免缩写,除非是公认的缩写,如
id(标识符)。
2. 简洁性
好味道:
- 通过合理的简化代码逻辑,使其简洁明了。例如:
使用范围for (const auto& item : items) {process_item(item); }for循环代替传统循环,简化代码,提升可读性。
坏味道:
- 冗长且重复的代码:
这段代码虽然功能一致,但过于冗长,for (int i = 0; i < items.size(); ++i) {process_item(items[i]); }for循环的初始化和条件检查在现代C++中已经有更简洁的替代方法。
最佳实践:
- 避免不必要的冗长代码,使用C++标准库和现代特性(如
range-based for loops)来简化常见模式。
3. 一致性
好味道:
- 统一项目中的代码风格、命名规则和缩进格式。如所有变量使用
snake_case,所有类使用CamelCase。
坏味道:
- 项目中存在不同风格的代码:
使用混乱的风格使代码难以维护和理解。int getData(); // CamelCase int get_data(); // snake_case
最佳实践:
- 制定并遵循项目中的编码风格指南(如Google C++ Style Guide)。使用工具如
clang-format来自动化代码格式化。
4. 注释
好味道:
- 在必要时注释说明代码的意图或复杂逻辑:
// Calculate the total price for the items in the cart int total = calculate_total_price(item_count, item_price);
坏味道:
- 过度注释或注释解释显而易见的代码:
int total = calculate_total_price(item_count, item_price); // calculate total
最佳实践:
- 只在代码复杂或意图不够明确时添加注释。代码应该通过清晰的命名自我解释。避免注释解释已经显而易见的代码行为。
5. 避免复杂性
好味道:
- 将复杂逻辑分解为更小的函数或模块:
每个函数只处理一件事,便于理解和测试。void process_transaction() {if (!is_valid_transaction()) {log_error();return;}update_database();send_confirmation(); }
坏味道:
- 复杂的、难以理解的长函数:
void process_transaction() {if (condition1 && condition2 || condition3) {// many lines of code} }
最佳实践:
- 遵循单一责任原则(SRP),一个函数应该只做一件事。复杂的逻辑可以通过模块化和分解为多个小函数来简化。
6. 重构
好味道:
- 定期进行代码重构,使代码更加整洁、可读。例如,将重复代码提取成单独的函数:
void process_payment() {deduct_funds();send_receipt(); }void process_refund() {refund_funds();send_receipt(); }
坏味道:
- 不重构和积累技术债务,导致代码难以维护和扩展。
最佳实践:
- 定期审查代码,识别重复代码和不必要的复杂性。重构不仅限于修复问题,还可以提升代码的可扩展性和性能。
7. 测试
好味道:
- 编写全面的单元测试,覆盖核心逻辑:
TEST(CalculatorTest, CalculatesTotalPrice) {ASSERT_EQ(calculate_total_price(3, 100), 300); }
坏味道:
- 缺乏测试或测试覆盖率低,导致代码的可靠性无法保证。
最佳实践:
- 使用单元测试框架如
Google Test或Catch2,确保核心功能被测试,避免回归问题。
8. 错误处理
好味道:
- 使用
try-catch和合适的错误处理机制:try {process_file(file_name); } catch (const std::exception& e) {std::cerr << "Error: " << e.what() << std::endl; }
坏味道:
- 忽略错误或简单返回错误代码而不处理:
process_file(file_name); // No error handling
最佳实践:
- 通过异常处理和错误日志记录,使代码在处理错误时更加健壮。
9. 文档
好味道:
- 编写详细的API文档,并解释函数的作用、参数和返回值。
坏味道:
- 缺乏文档,导致外部开发者难以理解代码的用法和意图。
最佳实践:
- 使用工具如
Doxygen自动生成文档,并确保文档与代码保持同步。
10. 代码复用
好味道:
- 创建可复用的函数和模块,避免重复代码:
void send_message(const std::string& recipient, const std::string& message) {// send message logic }
坏味道:
- 重复代码出现在多个地方,增加维护成本。
最佳实践:
- 遵循DRY(Don’t Repeat Yourself)原则,提取公用逻辑,使代码更加模块化和复用。
11. 性能优化
好味道:
- 在不牺牲代码可读性的前提下优化性能:
for (auto& element : container) {// Process element efficiently }
坏味道:
- 过早的优化,牺牲代码的可读性和可维护性。
最佳实践:
- 在有明显的性能瓶颈时进行优化,使用合适的数据结构和算法。
12. 安全性
好味道:
- 采用安全的编程实践,防范常见的安全漏洞,如缓冲区溢出和SQL注入:
std::string sanitize_input(const std::string& input) {// sanitize logic to prevent injection attacks }
坏味道:
- 缺乏安全防范,易受到攻击。
最佳实践:
- 遵循安全编码标准,定期检查潜在的安全漏洞。
通过遵循这些规范,可以确保C++代码不仅仅是实现功能,还具备良好的可读性、可维护性和性能。同时,定期反思和改进编码实践,能不断提升代码质量。
- 代码规范推荐
另外,为了更好地强化C++代码质量,这里推荐一份 华为C++代码规范
相关文章:
提升C++代码质量的一些建议
文章目录 1. 命名清晰2. 简洁性3. 一致性4. 注释5. 避免复杂性6. 重构7. 测试8. 错误处理9. 文档10. 代码复用11. 性能优化12. 安全性- 代码规范推荐 C开发中,写出优雅且可维护的代码不仅能提升代码质量,还能提高团队协作效率和项目长期的可扩展性。以下…...
起重机防摇摆技术如何达标-武汉正向科技
武汉正向科技防摇摆控制器 主要技术参数 1、防摇摆精度: 0.4 2、行车到达目标位置偏差位置偏差: 25mm 3、通讯方式:PROFINET / PROFIBUS / RS232 / RS422 / RS485; 4、消除载荷的摇摆达 96% 以上; 5、技术先进…...
[大语言模型-论文精读] MoRAG - 基于多部分融合的检索增强型人体动作生成
MoRAG--Multi-Fusion Retrieval Augmented Generation for Human Motion KS Shashank, S Maheshwari, RK Sarvadevabhatla - arXiv preprint arXiv:2409.12140, 2024 MoRAG - 基于多部分融合的检索增强型人体动作生成 1. 目录 MoRAG--Multi-Fusion Retrieval Augmented Generat…...
解决端口被占用
当你被你的编译器提醒, 当前端口被占用, 但明明你的服务什么的都没有启用,这时有三种解决办法: 1 。 重启 。 重启解决80%的问题 2 。 修改你的端口号 。 3 。 去windows命令行中查看,端口占用情况 第一步 …...
【递归】7. leetcode 404 左叶子之和
1 题目描述 题目链接:左叶子之和 2 解答思路 递归分为三步,接下来就按照这三步来思考问题 第一步:挖掘出相同的子问题 (关系到具体函数头的设计) 第二步:只关心具体子问题做了什么 (关系…...
react+antdMobie实现消息通知页面样式
一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…...
Git 撤销一个已经push到远端仓库的commit
在 Git 中,撤销一个已经推送到远程仓库的改动有几种不同的方法,具体取决于你是否想要完全删除改动,还是只是恢复文件的某个状态。以下是常见的几种方法: git revert 撤销特定的commit git revert 是最安全的方法,因为…...
lambda表达式底层实现
一、lambda 代码 & 反编译 原始Java代码 假设我们有以下简单的Java程序,它使用Lambda表达式来遍历并打印一个字符串列表: import java.util.Arrays; import java.util.List;public class LambdaExample {public static void main(String[] args) {…...
鸿蒙NEXT开发-组件事件监听和状态管理(基于最新api12稳定版)
注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...
《More Effective C++》的学习
引用与指针 没有所谓的null reference reference一定需要代表某个对象,所以C要求reference必须有初值。 QString &s; 使用reference可能比使用pointer更高效。 因为reference一定是有效的,而指针可能为空(需要多加一个判断࿰…...
Leetcode面试经典150题-322.零钱兑换
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...
python17_len()函数
len()函数 A B "" C "hello world" D 18 E 18def len_test(s):try:# 尝试计算字符串的长度length len(s)return lengthexcept TypeError:# 如果不是字符串,则返回 None 或者提示错误return Noneif __name__ "__main__":# 单…...
车视界系统小程序的设计
管理员账户功能包括:系统首页,个人中心,汽车品牌管理,汽车颜色管理,用户管理,汽车信息管理,汽车订单管理系统管理 微信端账号功能包括:系统首页,汽车信息,我…...
SQLCMD命令行工具导入数据并生成对应的日志文件
SQLCMD是一个命令行工具,专门用于在Microsoft SQL Server数据库上运行SQL脚本和管理任务。它提供了一种交互式和自动化的方式来执行SQL命令和脚本,并允许用户与SQL Server数据库进行高效的交互。以下是关于SQLCMD的详细介绍: 主要功能 执行SQL脚本: SQLCMD可以执行包含SQL…...
tauri中加载本地文件图片或者下载网络文件图片后存储到本地,然后通过前端页面展示
有一个需求是需要将本地上传的文件或者网络下载的文件存储到本地,并展示在前端页面上的。其实如果只是加载本地文件,然后展示还是挺简单的,可以看我的文章:tauri程序加载本地图片或者文件在前端页面展示-CSDN博客 要想实现上述需…...
QSqlDatabase在多线程中的使用
Qt中多线程使用数据库_qt数据库管理类支持多数据库,多线程-CSDN博客 1. 代码: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError>…...
【无人机设计与控制】Multi-UAV|多无人机多场景路径规划算法MATLAB
摘要 本研究探讨了多无人机路径规划问题,提出了三种不同算法的对比分析,包括粒子群优化(PSO)、灰狼优化(GWO)和鲸鱼优化算法(WOA)。利用MATLAB实现了多场景仿真实验,验证…...
Visual Studio C# 编写加密火星坐标转换
Visual Studio C# 编写加密火星坐标转换 1、WGS84坐标转GCJ02火星坐标2、GCJ02火星坐标转WGS84坐标(回归计算)3、GCJ02火星坐标转BD09百度坐标4、BD09百度坐标转GCJ02火星坐标(回归计算)5、坐标公共转换类6、地图显示7、程序简单界…...
微服务-流量染色
1. 功能目的 通过设置请求头的方式将http请求优先打到指定的服务上,为微服务开发调试工作提供便利 请求报文难模拟:可以直接在测试环境页面上操作,流量直接打到本地IDEA进行debug请求链路较长:本地开发无需启动所有服务…...
C语言实现 操作系统 经典的进程同步问题(2)
哲学家进餐问题 哲学家进餐问题是一个经典的同步问题,涉及多个哲学家试图同时用餐,但每个哲学家左右两边只有一把叉子。为了避免死锁和饥饿,可以使用记录型信号量(也称为计数信号量)来管理叉子的使用。 1、利用记录型…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
