转自个人博客

1. 避免创建过多中间变量

过多的中间变量不利于代码的可读性,还会增加内存的使用,而且可能导致额外的计算开销。

将用于同一种情况的变量统一管理,可以使用一种通用的变量来代替多个变量。

2. 函数中习惯使用引用传参而不是返回值赋值

常有的一种情况是,需要使用函数进行计算或处理数据,并通过其返回值获得结果。

对于简单的计算或处理,直接使用返回值返回结果无可厚非,方便快捷也影响不了多少运行效率。

但对于复杂处理,或对大数据量的变量进行处理时,就要习惯使用引用传参进行赋值并获得处理结果。引用传参后函数能直接对原变量进行操作,能减少不必要的内存拷贝,提高运行效率。而且,可以使用返回值实现其他功能,比如用一个bool值返回操作是否成功。

#include <iostream>  int calculation(const int &x, const int &y) {  return x + y; // 简单运算
}  bool complexCalculation(const int &x, const int &y, int &result) {// 复杂运算result = .....;return true;// 对于失败情况返回false 
}int main() {  int a = 5, b = 10, result;  result = calculation(a, b);  // 直接获取值if(complexCalculation(a, b, result)){ // 引用传参std::cout << "Calculation successful" << result;}return 0;  
}  

3. 习惯使用const修饰参数

始终记得对需要的变量函数参数使用const关键字修饰是一个很好的习惯,比如上面的bool complexCalculation(const int &x, const int &y, int &result);

使用const变量能避免无意中修改变量参数值,尤其是后期维护或升级代码时,有时候就会忘记以前写的代码的特定使用场景而为了图方便直接修改。在需要的地方使用const修饰也有利于提高代码可读性和安全性。

4. 全局变量在使用的时候再分配内存

一般来说,全局变量会在程序启动时分配内存,对于指针,一些人习惯性会在构造函数中分配需要的内存,而很多时候,这是不必要的,应该谨慎考虑变量的使用情况,在实际第一次需要的时候再分配内存。这样能避免不必要的内存占用,也能避免一些内存泄露的情况。

class myClass {
public:explicit  myClass(){m_myArray = nullptr;}~myClass(){delete[] m_myArray;  };void myFunc(){m_myArray = new int[5]; // 在此处第一次需要时再分配内存for (int i = 0; i < 5; ++i) {  globalArray[i] = i * 10;  std::cout << globalArray[i] << std::endl;  } // 释放内存也要再不需要的时候进行释放}protected:int *m_myArray;  
};

5. 减少函数调用的次数

程序中跳转执行的代价很高,不利于运行效率,而很多人忽视了一点是,常用的函数也是一种跳转执行的情况。

每一次函数调用都带来一定的开销,在频繁调用的情况下,合理管理这个开销就显得格外重要。

一般我们都习惯使用函数能提高代码的可读性,但有些时候这样就会降低代码的运行效率,有句话叫“效率高的代码可读性都不高”,虽然我们不必做到极致的高效率,但也要谨慎权衡效率和可读性。

而要避免使用不必要的函数可以考虑通过内联函数或者将常用常量作为全局变量来减少函数调用。

#include <iostream>  inline int square(int x) {  // 内联函数  return x * x; 
}  int main() {  for (int i = 0; i < 5; ++i) {  // 减少函数调用的次数  std::cout << "Square of " << i << " is " << square(i) << std::endl; }  return 0;  
}  

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

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

相关文章

C#Blazor应用-跨平台WEB开发VB.NET

在 C# 中实现 Blazor 应用需要结合 Razor 语法和 C# 代码&#xff0c;Blazor 允许使用 C# 同时开发前端和后端逻辑。以下是一个完整的 C# Blazor 实现示例&#xff0c;包含项目创建、基础组件和数据交互等内容&#xff1a; 一、创建 Blazor 项目 使用 Visual Studio 新建项目 …

前端的安全隐患之API恶意调用

永远不要相信前端传来的数据&#xff0c;对于资深开发者而言&#xff0c;这几乎是一种本能&#xff0c;无需过多解释。然而&#xff0c;初入职场的开发新手可能会感到困惑&#xff1a;为何要对前端传来的数据持有如此不信任的态度&#xff1f;难道人与人之间连基本的信任都不存…

基于 Spark 实现 COS 海量数据处理

上周在组内分享了一下这个主题&#xff0c; 我觉得还是摘出一部分当文章输出出来 分享主要包括三个方面&#xff1a; 1. 项目背景 2.Spark 原理 3. Spark 实战 项目背景 主要是将海量日志进行多维度处理&#xff1b; 项目难点 1、数据量大&#xff08;压缩包数量 6TB,60 亿条数…

Unity3D 屏幕点击特效

实现点击屏幕任意位置播放点击特效。 屏幕点击特效 需求 现有一个需求&#xff0c;点击屏幕任意位置&#xff0c;播放一个点击特效。 美术已经做好了特效&#xff0c;效果如图&#xff1a; 特效容器 首先&#xff0c;画布是 Camera 模式&#xff0c;画布底下有一个 UIClic…

MCU编程

MCU 编程基础&#xff1a;概念、架构与实践 一、什么是 MCU 编程&#xff1f; MCU&#xff08;Microcontroller Unit&#xff0c;微控制器&#xff09; 是将 CPU、内存、外设&#xff08;如 GPIO、UART、ADC&#xff09;集成在单一芯片上的小型计算机系统。MCU 编程即针对这些…

Go语言--语法基础6--基本数据类型--数组类型(1)

Go 语言提供了数组类型的数据结构。 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列&#xff0c;这种类型可以是任意的 原始类型例如整型、字符串或者自定义类型。相对于去声明number0,number1, ..., and number99 的变量&#xff0c;使用数组形式 numbers[0], …

左神算法之给定一个数组arr,返回其中的数值的差值等于k的子数组有多少个

目录 1. 题目2. 解释3. 思路4. 代码5. 总结 1. 题目 给定一个数组arr&#xff0c;返回其中的数值的差值等于k的子数组有多少个 2. 解释 略 3. 思路 直接用hashSet进行存储&#xff0c;查这个值加上k后的值是否在数组中 4. 代码 public class Problem01_SubvalueEqualk {…

自回归(AR)与掩码(MLM)的核心区别:续写还是补全?

自回归(AR)与掩码(MLM)的核心区别:用例子秒懂 一、核心机制对比:像“续写”还是“完形填空”? 维度自回归(Autoregressive)掩码语言模型(Masked LM)核心目标根据已生成的token,预测下一个token(顺序生成)预测句子中被“掩码”的token(补全缺失信息)输入输出输入…

后端开发两个月实习总结

前言 本人目前在一家小公司后端开发实习差不多两个月了&#xff0c;现在准备离职了&#xff0c;就这两个月的实习经历写下这篇文章&#xff0c;既是对自己实习的一个总结&#xff0c;也是给正在找实习的小伙伴以及未来即将进入到后端开发这个行业的同学的分享一下经验。 一、个…

Python基础(​​FAISS​和​​Chroma​)

​​1. 索引与查询性能​ ​​指标​​​​FAISS​​​​Chroma​​​​分析​​​​索引构建速度​​72.4秒&#xff08;5551个文本块&#xff09;91.59秒&#xff08;相同数据集&#xff09;FAISS的底层优化&#xff08;如PQ量化&#xff09;加速索引构建&#xff0c;适合批…

Windows下memcpy_s如何在Linux下使用

Windows下代码如下 memcpy_s(pLine->ppBuf[i], m_ColorLineByte, pIn nOffset, m_ColorLineByte); 方案 1&#xff1a;使用标准 memcpy 手动检查&#xff08;最通用&#xff09; // 检查参数有效性 if (pLine->ppBuf[i] nullptr || pIn nullptr || m_ColorLi…

2025年数学算法与自动化控制国际会议(ICMAAC 2025)

2025年数学算法与自动化控制国际会议&#xff08;ICMAAC 2025&#xff09; 2025 International Conference on Mathematical Algorithms and Automation Control 一、大会信息 会议简称&#xff1a;ICMAAC 2025 大会地点&#xff1a;中国长沙 审稿通知&#xff1a;投稿后2-3日…

C语言数组介绍 -- 一维数组和二维数组的创建、初始化、下标、遍历、存储,C99 变长数组

目录 1. 一维数组 1.1 数组的概念 1.2 一维数组的创建 1.3 一维数组的初始化 1.4 数组的类型 1.5 数组下标 1.5.1 数组元素的遍历 1.5.2 数组的输入 1.6 一维数组在内存中的存储 1.7 sizeof 计算数组元素个数 2. 二维数组 2.1 二维数组的创建 2.2 二维数组的初始…

SpringAI + DeepSeek大模型应用开发 - 进阶篇(上)

三、SpringAI 2. 哄哄模拟器 2.1 提示词工程 提示词工程&#xff08;Prompt Engineering&#xff09;&#xff1a;通过优化提示词&#xff0c;使大模型生成尽可能理想的内容&#xff0c;这一过程就叫提示词工程。 &#xff08;1&#xff09;清晰明确的指令 谈谈人工智能 …

Spring Boot实现异常处理

Spring Boot 提供了多种灵活的方式实现异常处理&#xff0c;以下是核心方案和最佳实践&#xff1a; 一、基础异常处理方案 1. ControllerAdvice ExceptionHandler&#xff08;全局处理&#xff09; ControllerAdvice public class GlobalExceptionHandler {// 处理特定异常&…

【目标检测】IOU的概念与Python实例解析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Vue2中如何使用vue-print-nb打印功能

插件官网地址&#xff1a;vue-print-nb - npm 1.安装 npm install vue-print-nb --save 2.导入打印插件 //main.js import Print from vue-print-nb Vue.use(Print); 3.配置参数 4.页面使用 <div id"printDiv">打印内容</div><el-button v-print&…

Matplotlib快速入门

目录 基本使用 解决中文乱码 一个坐标系绘制多个图像 多个坐标系绘制 基本使用 什么是Matplotlib 是专门用于开发2D图表(包括3D图表)以渐进&#xff0c;交互式方式实现数据可视化 为什么要学习matplotlib 可视化是在整个数据挖掘的关键辅助工具&#xff0c;可以清晰的理解…

扣料不允许‘货物移动’

遇到了报错&#xff0c;不允许货物移动 以为又是和之前一样是订单已经关闭&#xff0c;看是领错料还是财务误关的原因&#xff0c;但是co03一看订单状态并没有关闭 原因就是这个CRTD 订单只是创建了&#xff0c;但是没有下达 找个正常的看看&#xff1a; 一般订单创建和下达都…

【AI】全新AI测试系列之二--------AI自动化测试,提高测试效率

目录 一、自动化测试 1、与手动测试对比 2、自动化测试流程 二、自动化测试环境搭建 三、web自动化使用AI的两种方式 1、利用DeepSeek快速生成脚本 2、pycharm集成通义灵码 四、通义灵码实战 1、使用提示词生成代码 2、使用pytest框架 前言&#xff1a;上一章节只要是…