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

如何对比引用传参和值传参两者的效率

     以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。
#include <time.h>
struct A{ int a[10000]; };
void TestFunc1(A a){}
void TestFunc2(A& a){}
void TestRefAndValue()
{A a;// 以值作为函数参数size_t begin1 = clock();for (size_t i = 0; i < 10000; ++i)TestFunc1(a);size_t end1 = clock();// 以引用作为函数参数size_t begin2 = clock();for (size_t i = 0; i < 10000; ++i)TestFunc2(a);size_t end2 = clock();
// 分别计算两个函数运行结束后的时间cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;//7cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;//0,0是因为单位是毫秒,可能比毫秒快
}int main()
{TestRefAndValue();return 0;}

值和引用的作为返回值类型的性能比较

#include <time.h>
struct A{ int a[10000]; };
A a;
// 值返回
A TestFunc1() { return a;}
// 引用返回
A& TestFunc2(){ return a;}
void TestReturnByRefOrValue()
{// 以值作为函数的返回值类型size_t begin1 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc1();size_t end1 = clock();// 以引用作为函数的返回值类型size_t begin2 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc2();size_t end2 = clock();// 计算两个函数运算完成之后的时间cout << "TestFunc1 time:" << end1 - begin1 << endl;//152cout << "TestFunc2 time:" << end2 - begin2 << endl;//0
}int main()
{TestReturnByRefOrValue();return 0;
} 

通过上述代码的比较,发现传值和指针在作为传参以及返回值类型上效率相差很大

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

相关文章:

  • 探索软件工程:构建可靠、高效的数字世界
  • 超越肉眼:深入计算机视觉的奇妙之旅
  • mac 安装 nvm 【真解决问题】
  • 【Godot 3.5控件】用TextureProgress制作血条
  • 第十届蓝桥杯大赛个人赛省赛(软件类)真题- CC++ 研究生组
  • Linux:Gitlab:16.9.2 创建用户及项目仓库基础操作(2)
  • 【数据挖掘】实验5:数据预处理(1)
  • 383.赎金信
  • Python 3 教程(8)
  • Mysql数据库深入理解
  • android 音频焦点,音频策略梳理
  • go语言-基础元素与结构的使用
  • 【leetcode热题】 二叉树的右视图
  • 康奋威科技邀您到场参观2024长三角快递物流展
  • linux centos 安装jenkins,并构建spring boot项目
  • 是德科技keysight DSOX3024T示波器
  • C#获取HTML源码
  • element-ui checkbox 组件源码分享
  • JavaEE--小Demo--数据库建立
  • 读算法的陷阱:超级平台、算法垄断与场景欺骗笔记19_前方的路
  • MySQL双一参数性能测试
  • CodeSys创建自定义的html5控件
  • Xcode15报错: SDK does not contain ‘libarclite‘
  • 矩阵快速幂
  • 数据之谜:解读Facebook的用户行为
  • 学习 考证 帆软 FCP-FineBI V6.0 考试经验
  • 《过滤器模式(极简c++)》
  • 【C++】如何用一个哈希表同时封装出unordered_set与unordered_map
  • Day45:WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件
  • web安全之:三种常见的Web安全威胁