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

C++之函数传参方式

文章目录

  • 一、函数指针传参
  • 二、引用传参
  • 三、函数指针传参 vs. 引用传参:如何选择?

一、函数指针传参

  1. 什么是函数指针?
    函数指针本质上是一个指针,他是一个可以指向函数的指针。通过使用函数指针。我们可以在运行时决定调用哪个函数。

函数指针的定义

int (*fun)(int,int);

初始化函数指针

#include<stdio.h>
#include<iostream>using namespace std;
int add(int a, int b)
{int result = a + b;return result;
}int main()
{int (*fun)(int, int);fun = add; //初始化函数指针int res = fun(3, 4); //使用函数指针去调用函数cout << res << endl;return 0;
}

函数指针做为函数参数进行传递的时候(回调函数)

#include<stdio.h>
#include<iostream>using namespace std;
int Add(int a, int b)
{int result = a + b;return result;
}int Mul(int a, int b)
{int res = a * b;return res;
}int Res(int(*fun)(int, int), int a, int b)
{return fun(a, b);  //将上面两个函数作为参数传入此函数
}int main()
{int res1 = Res(Add, 3, 4);cout << res1 << endl;int res2 = Res(Mul, 3, 4);cout << res2 << endl;
}

函数指针作为参数传递给其他函数的时候,提高了调用函数的灵活性。
1.灵活性高:可以在运行时选择函数,实现更通用的代码设计
2.可拓展性高:适用于回调机制和策略模式
3.复杂度高:函数指针的使用容易增加代码的复杂性,尤其在涉及多个函数指针时,代码可读性降低
4.安全性:若未正确使用函数指针,可能导致未定义的行为,导致程序崩溃

函数指针作为函数的返回值

#include<stdio.h>
#include<iostream>using namespace std;
int Add(int a, int b)
{int result = a + b;return result;
}int Mul(int a, int b)
{int res = a * b;return res;
}int (*fun(int opt))(int, int)
{if (opt == 1){return Add; //返回Add的函数地址}return Mul; //返回Mul的函数地址
}int main()
{int opt = 1;int (*p)(int, int) = fun(opt); //将返回的函数地址赋值给函数指针int res = p(3, 4); //使用函数指针调用函数cout << res << endl;
}

返回值为函数指针的函数
1.(*fun(int opt))是一个函数,函数名fun,返回值是一个指针,参数是opt

2.去掉函数名字部分,剩下 int(*)(int,int),就是一个函数指针,该指针指向的函数有两个int类型的参数

二、引用传参

引用传参:&是C++里面独有的传参方式

int fun(int &a,int &b)
{int res=a+b;return res;
}

引用传参:
1.无需复制,引用传参避免了参数值的复制,从而提高了程序效率
2.允许修改,函数内部的操作会直接影响外部变量,这对于需要在函数中修改参数值的情况非常有用
3.高效,减少了内存的占用和赋值,适合传递大型对象
4.引用本质上是变量的别名,使用引用传递参数可能会避免指针传参导致空指针的错误,更加安全
5.因为函数内部对引用参数的修改会直接反映在外部变量上,如果不小心可能会导致意外的副作用。
6.引用传参只能用于非临时对象,因此对于需要传递函数作为参数的场景并不适用。

三、函数指针传参 vs. 引用传参:如何选择?

  1. 选择标准 (摘自AI让生活更美好)
    根据需求选择:如果需要在运行时动态选择和执行函数,那么函数指针传参无疑是最佳选择。而在处理大对象或需要在函数中直接修改参数值时,引用传参更为合适。
    考虑性能与可读性:对于性能敏感的应用,引用传参由于避免了复制开销,通常更加高效。而函数指针传参由于灵活性较强,往往会增加代码的复杂性,需要仔细考虑其对代码维护性的影响。
  2. 具体应用场景
    函数指针传参的应用:
    1.1 回调函数:在GUI编程或异步操作中,常用函数指针实现回调机制。
    1.2 策略模式:可以通过函数指针实现不同的算法策略,灵活选择算法实现。
    引用传参的应用:
    1.3 对象操作:在操作大型对象时,引用传参避免了不必要的复制,提高了程序的性能。
    1.4 输入输出参数:当函数需要返回多个结果时,可以通过引用传参来实现多值返回。
    四、总结
    函数指针传参和引用传参各自有其适用的场景和特点。函数指针传参提供了高度的灵活性,适用于需要动态选择函数的场景,而引用传参则强调效率和安全性,更适合处理大型对象和直接修改参数的场合。在实际编程中,根据具体的需求和代码设计选择合适的传参方式,才能写出高效且易于维护的代码。

http://www.mrgr.cn/news/454.html

相关文章:

  • ImageMagick从pdf导出高清图片
  • 宝兰德荣获openEuler项目群青铜捐赠人称号,共筑开源生态繁荣新篇章
  • STM32标准库学习笔记-9.DMA 直接存储器存取
  • 二、前后端分离通用权限系统(2)
  • 笑出腹肌!Ubuntu:如果连猫都会用,那你呢?‍
  • Java语言程序设计——篇十五(1)
  • Python实现人脸轮廓提取
  • AWS 注册是否必须提供信用卡号?
  • Qt/QML学习-StackView
  • 【笔试题面试题】(网络编程类1)知识点汇总,常用概念
  • Vue 3 + 天地图 + D3.js 绘制行政区划
  • 4.vue中引入axios
  • 关于鸿蒙开发中装饰器@Extend、@Styles、@Builder的介绍
  • Linux - 权限
  • PostgreSQL的walwriter进程
  • 【SpringBoot】SpringBoot项目中实现数据缓存
  • 家里养有宠物,宠物空气净化器真的能除毛除臭吗?
  • 使用PowerShell自动化Windows系统管理任务
  • Squish 8.0现已发布
  • 用“文心一言”写的文章,看看AI写得怎么样?