C++ 代码常用规范记录

根据代码review时,大家给的commonts中的常见问题做此记录,后续编写代码时需要自行check是否有以下问题

一、参数合理性check

函数输入参数,如指针是否为空的check;配置文件中设置的参数是否合法,是否超过限制等

二、if 判断的规范

推荐将常量写在前面,这样如果不小心写成 1 = a 后编译器会报错

如果将 a == 1不小心写成 a=1后,编译器不会报错,不容易发现问题

if (1 == a)
// if (1 == a)

三、数据类型定义

推荐使用自己项目中用typedef 定义好的 int32_t float32_t float64_t来定义数据,这样可以保证在不同的系统中,int32_t都是32位的类型了,以此类推(具体实现原理是定义的头文件中还包含了对这段代码进行预编译,会先判断int 为多少位,根据系统进行相应的定义)

int32_t  float32_t float64_t
// int  float 

四、for语句中使用 ++i的形式

在for 循环for语句中不管使用++i还是i++,对最终的计算结果其实是没有区别的,++i 的 形式效率更高:i++需要一个暂时变量,然后将i加1后,返回的是暂时变量。而++i就是自增后返回i,所以在空间损耗上,i++要略高于++i,因此,在不影响代码逻辑的前提下,要尽量使用++i

【注意】是for语句中,其他位置需要具体check这两种对结果是否有影响,再决定是否使用++i

for(int32_t i = 0; i < 10; ++i)
// for(int32_t i = 0; i < 10; i++)

五、合理和不合理的空格、空行

六、占内存较大的数据尽量避免数据拷贝

指针、引用、或直接开始给目前变量赋值等

七、const使用

函数中不需要修改的变量等,加上const

八、static的使用

每次函数调用时都需要定义一个较大的值,为了放置每次都给这个变量分配内存,比较耗时,可以给变量前加 static

九、代码中尽量不要出现自己定义的直接的数值

if(a > min_value) // yes
if(a > 20) // no: 类似的数值需要配置成参数# define LIST_NUM (100)
int32_t a[LIST_NUM];  // yes
int a[100]; // no: 这种参数需要写成上面的宏定义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM运行时五大数据区域详解

前言&#xff1a; java虚拟机再执行Java程序的时候把它所拥有的内存区域划分了若干个数据区域。这些区域有着不同的功能&#xff0c;各司其职。这些区域不但功能不同&#xff0c;创建、销毁时间也不同。有些区域为线程私有&#xff0c;如&#xff1a;每个线程都有自己的程序计数…

什么是MVVM?

MVVM&#xff0c;是Mode1-View-ViewModel的简写&#xff0c;是M/-V-VM三部分组成。它本质上就是MVC的改进版。MVVM就是将其中的View的状态和行为抽象化&#xff0c;其中ViewModel将视图U和业务逻辑分开&#xff0c;它可以取出Model的数据间时帮忙处理View中由于需要展示内容而涉…

“深入解析JVM:探索Java虚拟机的工作原理“

标题&#xff1a;深入解析JVM&#xff1a;探索Java虚拟机的工作原理 摘要&#xff1a;本文将深入解析Java虚拟机&#xff08;JVM&#xff09;的工作原理&#xff0c;从字节码到执行过程&#xff0c;从内存模型到垃圾回收机制&#xff0c;逐步剖析JVM的核心组成部分和工作原理。…

linux脚本

程序后台运行&#xff1a; nohup java -jar xxx.jar &>hello.log & 后台运行java-jar命令&#xff0c;并且将日志输出到hello.log文件 防火墙&#xff1a; 开启防火墙&#xff1a;systemctl start firewalld 开放指定端口&#xff1a;firewall-cmd --zonepublic --…

【Java可执行命令】(十八)可视化监控和管理工具 jconsole:获取 JVM的内存使用情况、线程活动、GC 行为等重要指标的可视化工具 ~

Java可执行命令之jconsole 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 注意事项 4️⃣ 应用场景&#x1f33e; 总结 1️⃣ 概念 jconsole 是 Java Development Kit (JDK) 自带的一款图形化监控和管理工具。它旨在提供一个简单而强大的界面&#xff0c;用于监视和管…

java代理模式

为什么需要代理模式 比如现在项目经理有一个需求&#xff1a;在项目现有所有类的方法前后打印日志。如何实现&#xff1f; 静态代理 interface SmsService {void send(String message); }class SmsServiceImpl implements SmsService {public void send(String message) {Sys…

mysql索引介绍

索引可以提升查询速度&#xff0c;会影响where查询&#xff0c;以及order by排序。MySQL索引类型如下&#xff1a; 从索引存储结构划分&#xff1a;B Tree索引、Hash索引、全文索引 从应用层次划分&#xff1a;主键索引、唯一索引、单值索引、复合索引 从索引键值类型划分&am…

【C++进阶】继承、多态的详解(继承篇)

【C进阶】继承、多态的详解&#xff08;继承篇&#xff09; 目录 【C进阶】继承、多态的详解&#xff08;继承篇&#xff09;继承的概念及定义继承的概念继承的定义定义格式继承关系和访问限定符继承基类成员访问方式的变化 基类和派生类对象赋值转换继承中的作用域派生类的默认…

prometheus监控k8s服务并告警到钉钉

一、监控k8s集群 要监控k8s集群需要使用到以下服务用于收集监控的资源信息&#xff0c;node_exporter用于监控k8s集群节点的资源信息&#xff0c;kube-state-metrics用于监控k8s集群的deployment、statefulset、daemonset、pod等的状态&#xff0c;cadvisor用于监控k8s集群的p…

JVM内存管理

文章目录 1、运行时数据区域1.1 程序计数器&#xff08;线程私有&#xff09;1.2 JAVA虚拟机栈&#xff08;线程私有&#xff09;1.3 本地方法栈1.4 Java堆&#xff08;线程共享&#xff09;1.5 方法区&#xff08;线程共享&#xff09;1.6 直接内存&#xff08;非运行时数据区…

vue动态生成行

vue代码 <el-table :data"form.lineInfos" :bordertrue style"width: 99.99%;"> <el-table-column type"index" label"序号" width"50"></el-table-column> <el-table-column prop"unitPrice&qu…

golang协程池(goroutine池)ants库实践

golang中goroutine由运行时管理&#xff0c;使用go关键字就可以方便快捷的创建一个goroutine,受限于服务器硬件内存大小&#xff0c;如果不对goroutine数量进行限制&#xff0c;会出现Out of Memory错误。但是goroutine泄漏引发的血案&#xff0c;想必各位gopher都经历过&#…

在Qt中使用LoadLibrary无法加载DLL

Qt系列文章目录 文章目录 Qt系列文章目录前言一、问题分析 前言 最近因项目需要使用qt做开发&#xff0c;之前使用LoadLibrary加载dll成功&#xff0c;很庆幸&#xff0c;当一切都那么顺风顺水的时候&#xff0c;测试同事却发现&#xff0c;在windows平台上个别电脑上加载dll会…

Redis BitMap/HyperLogLog/GEO/布隆过滤器案例

面试问题&#xff1a; 抖音电商直播&#xff0c;主播介绍的商品有评论&#xff0c;1个商品对应了1系列的评论&#xff0c;排序展现取前10条记录用户在手机App上的签到打卡信息&#xff1a;1天对应1系列用户的签到记录&#xff0c;新浪微博、钉钉打卡签到&#xff0c;来没来如何…

【Grafana】中文界面配置 v10.0.3

比如通过 docker run -d -p 3000:3000 -v /e/code/monitor/grafana/grafana.ini.txt:/etc/grafana/grafana.ini grafana/grafana运行一个容器&#xff08;最新是v10.0.3&#xff09;。 在 /admin/settings 可以看到 users 部分有一个 default_language 配置。 所以在挂载到 …

速看!Milvus JavaScript 客户端入门级使用指南

Milvus 是一款云原生的开源向量数据库&#xff0c;专为向量相似性搜索和 AI 应用赋能。Milvus 支持水平扩展&#xff0c;可以处理海量数据&#xff0c;同时&#xff0c;Milvus 还提供多语言的 SDK &#xff08;包括 JavaScript&#xff09;。 使用 Milvus node.js SDK&#xff…

php代码审计,php漏洞详解

文章目录 1、输入验证和输出显示2、命令注入(Command Injection)3、eval 注入(Eval Injection)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL 注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)7、Session 会话劫持(Session Hijacking…

vue 后端返回文件流,前端导出下载

vue 后端返回文件流&#xff0c;前端导出下载 配置axios响应拦截器 request.interceptors.response.use((response) > {const res response.data// 关键代码: 返回的是文件流if (res instanceof Blob) {return response}if (res.code 200 || res true) {return res} el…

Python使用OpenAI 和大型语言模型对话PDF和图像文本

本文首先介绍文件文本嵌入方法及代码实现&#xff0c;然后介绍和代码实现提取PDF和图像文本应用于大型语言模型。在此基础上&#xff0c;构建回答任何问题的人工智能助手。 创建文本嵌入 文本嵌入是自然语言处理&#xff08;NLP&#xff09;领域的重要工具。它们是文本的数字…

线性代数复习公式整理(自用/持续更新)

第一章 行列式 设A、B为n阶矩阵 ∣ A T ∣ ∣ A ∣ \left | A^T \right | \left | A \right | ​AT ​∣A∣ ∣ A m ∣ ∣ A ∣ m \left | A^m \right | \left | A \right | ^m ∣Am∣∣A∣m ∣ k A ∣ k n ∣ A ∣ \left | kA \right | k^n\left | A \right | ∣kA∣kn∣A…