本文主要介绍 C++ 编程语言中值传递(pass-by-value)和引用传递(pass-by-reference)的相关知识。

1 值传递(pass-by-value)

在 C++ 编程语言中,一个函数在使用参数时,如果使用 pass-by-value 方式,那么编译系统会在调用该函数的地方,把实参复制一份然后传给函数的形参

值传递的用法示例如下:

int FunA(string strTest);

对于值传递方法,说明如下:

  1. 如果在函数里修改传给函数的参数值,实际上修改的只是实参的副本,而在调用函数的位置,这个实参值本身并没有改变;
  2. 在值传递过程中进行的副本拷贝动作会耗费系统的资源,如果拷贝的参数是比较复杂的 struct 或者 class 等类型,复制出一份副本的成本(时空开销)会很大。

2 引用传递(pass-by-reference)

在 C++ 编程语言中,一个函数在使用参数时,如果使用 pass-by-reference 方式,那么编译系统会在调用该函数的地方,直接将实参的内存地址(指针)传给形参

引用传递的用法示例如下:

int FunA(string & strTest);

对于引用传递方法,说明如下:

  1. 由于函数的参数传递的是把实参的地址拷贝给形参,因此形参和实参对应同一块内存地址,所以对形参的修改自然会反映到实参上;
  2. 在 C++ 编程语言中,指针(内存地址)是一个 int 类型,所以即使在 64 位系统中,指针的复制成本(8字节)也是完全可以接受的;
  3. 由于 C++ 编程语言规定引用不能为空,所以在函数中传进来引用可以直接使用,而如果传进来的是指针类型(实际上是值传递,即引用传递之外的指针传递方式),那么还需要先判断指针是否为空,易用性不强。

3 总结

综合对比上述两种函数参数传递方式,可以看出在 C++ 编程语言中,一般情况下使用“引用传递”会更好。

示例代码内容如下:

int FunA(const string strTest)  // 值传递
{// some codes
}int FunB(const string & strTest)    // 引用传递,这里加了const关键字,为常引用。优选
{// some codes
}

C++编程语言中的值传递(pass-by-value)和引用传递(pass-by-reference)介绍相关推荐

  1. C++中值传递(pass-by-value)和引用传递(pass-by-reference)

    1.pass-by-value的情况: 缺省情况C++以pass-by-value(继承C的方式)传递对象至(或来自)函数.函数参数都是以实际参数的复件为初值,调用端所获得的也是函数返回值的一个复件, ...

  2. 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】

    引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...

  3. php引用传递_php的按值传递与引用传递 - 小俊学习网

    两者的区别: 值传递是两个变量占用不同的内存空间,而传引用则是同一个内存空间,实际就是对同一个变量进行操作. 传值,原有的值不会消失,不会改变,两个变量分别占用一个内存:传引用,原值会被修改,两个变量 ...

  4. python中的值传递和引用传递

    今天和大家分享python中很重要的一个知识点:参数传递,其中包括值传递和引用传递. 目录 一.为什么要熟悉值传递和引用传递 1.1 值传递 1.2 引用传递 二.Python变量及其赋值 三.Pyt ...

  5. 为什么说 Java 中只有值传递?

    对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂. ...

  6. 为什么说Java中只有值传递(另一种角度)

    转载自 为什么说Java中只有值传递 对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到 ...

  7. 为什么Java中只有值传递

    原文链接:https://www.cnblogs.com/wchxj/p/8729503.html 在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了.如果你有以下想法,那么你有必要好好阅读本 ...

  8. 什么是值传递,什么是引用传递。为什么说Java中只有值传递。

    关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的.还有的人可能知道Java中的参数传递是值传递,但是说不出来为什么. ...

  9. 为什么说Java中只有值传递

    点击上方"程序员小灰",选择"置顶公众号" 有趣有内涵的文章第一时间送达! 本文转载自公众号 Hollis 对于初学者来说,要想把这个问题回答正确,是比较难的. ...

  10. Java中的参数传递,到底是值传递还是引用传递?

    文章内容为转载,转载自公众号Hollis关于我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 原文链接:我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 知乎回答链接:Java 到 ...

最新文章

  1. Listview获取选中行的值
  2. The last packet successfully received from the server was 1,547,682,071 milliseconds ago. The last
  3. IBM: 拆分瘦身,还有机会吗?
  4. Java程序员的发展前景
  5. python路由编程_Python Django基础二之URL路由系统
  6. cocos2d-x游戏开发(四)游戏主循环
  7. ElasticSearch2.3.5源码研究(一)
  8. 勒索病毒入侵中国, Splunk建议网络立即进行区分和隔离设置
  9. Eclipse中Hibernate插件的安装
  10. Linux时间操作(time、gettimeofday)
  11. 驱动人生病毒清除教程
  12. 获取JSON文本(复嵌对象)转换指定JSON数据并Ajax实现数据初始可视化【附上echarts地图官方数据形式json文件数据】
  13. 雷达信号处理基础 多普勒频移
  14. MSP430F5529-基于ATK-IMU901角度传感器在UART的串口通信于数据显示
  15. 三国志战略版:Daniel_兵无常势分析
  16. Java服务器页面:JSP
  17. 基于SpringCloud分布式微服务+微信小程序实现短视频社交app设计
  18. sendEmail发送邮件
  19. Ubuntu 服务器初始化、系统安全加固、系统内核参数优化以及常用软件安装脚本分享...
  20. 非常详细的HTTPS分享

热门文章

  1. Linux基础之bash shell介绍及基本特性
  2. C#强制关闭Excel进程(通过COM使用Excel时)
  3. Android分发事件
  4. C#.NET中数组、ArrayList和List三者的区别
  5. 冬季打针后忌用手按摩
  6. Silverlight 解谜游戏 之七 放大镜(3)
  7. Qt5学习笔记之串口助手二:发送接收实现
  8. SharePoint 网站搬迁
  9. 20号:JAVA的值传递与引用传递的正确理解
  10. Django 视图与网址