C++编程语言中的值传递(pass-by-value)和引用传递(pass-by-reference)介绍
本文主要介绍 C++ 编程语言中值传递(pass-by-value)和引用传递(pass-by-reference)的相关知识。
1 值传递(pass-by-value)
在 C++ 编程语言中,一个函数在使用参数时,如果使用 pass-by-value 方式,那么编译系统会在调用该函数的地方,把实参复制一份然后传给函数的形参。
值传递的用法示例如下:
int FunA(string strTest);
对于值传递方法,说明如下:
- 如果在函数里修改传给函数的参数值,实际上修改的只是实参的副本,而在调用函数的位置,这个实参值本身并没有改变;
- 在值传递过程中进行的副本拷贝动作会耗费系统的资源,如果拷贝的参数是比较复杂的 struct 或者 class 等类型,复制出一份副本的成本(时空开销)会很大。
2 引用传递(pass-by-reference)
在 C++ 编程语言中,一个函数在使用参数时,如果使用 pass-by-reference 方式,那么编译系统会在调用该函数的地方,直接将实参的内存地址(指针)传给形参。
引用传递的用法示例如下:
int FunA(string & strTest);
对于引用传递方法,说明如下:
- 由于函数的参数传递的是把实参的地址拷贝给形参,因此形参和实参对应同一块内存地址,所以对形参的修改自然会反映到实参上;
- 在 C++ 编程语言中,指针(内存地址)是一个 int 类型,所以即使在 64 位系统中,指针的复制成本(8字节)也是完全可以接受的;
- 由于 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)介绍相关推荐
- C++中值传递(pass-by-value)和引用传递(pass-by-reference)
1.pass-by-value的情况: 缺省情况C++以pass-by-value(继承C的方式)传递对象至(或来自)函数.函数参数都是以实际参数的复件为初值,调用端所获得的也是函数返回值的一个复件, ...
- 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】
引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...
- php引用传递_php的按值传递与引用传递 - 小俊学习网
两者的区别: 值传递是两个变量占用不同的内存空间,而传引用则是同一个内存空间,实际就是对同一个变量进行操作. 传值,原有的值不会消失,不会改变,两个变量分别占用一个内存:传引用,原值会被修改,两个变量 ...
- python中的值传递和引用传递
今天和大家分享python中很重要的一个知识点:参数传递,其中包括值传递和引用传递. 目录 一.为什么要熟悉值传递和引用传递 1.1 值传递 1.2 引用传递 二.Python变量及其赋值 三.Pyt ...
- 为什么说 Java 中只有值传递?
对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂. ...
- 为什么说Java中只有值传递(另一种角度)
转载自 为什么说Java中只有值传递 对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到 ...
- 为什么Java中只有值传递
原文链接:https://www.cnblogs.com/wchxj/p/8729503.html 在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了.如果你有以下想法,那么你有必要好好阅读本 ...
- 什么是值传递,什么是引用传递。为什么说Java中只有值传递。
关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的.还有的人可能知道Java中的参数传递是值传递,但是说不出来为什么. ...
- 为什么说Java中只有值传递
点击上方"程序员小灰",选择"置顶公众号" 有趣有内涵的文章第一时间送达! 本文转载自公众号 Hollis 对于初学者来说,要想把这个问题回答正确,是比较难的. ...
- Java中的参数传递,到底是值传递还是引用传递?
文章内容为转载,转载自公众号Hollis关于我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 原文链接:我要彻底给你讲清楚,Java就是值传递,不接受争辩的那种! 知乎回答链接:Java 到 ...
最新文章
- Listview获取选中行的值
- The last packet successfully received from the server was 1,547,682,071 milliseconds ago. The last
- IBM: 拆分瘦身,还有机会吗?
- Java程序员的发展前景
- python路由编程_Python Django基础二之URL路由系统
- cocos2d-x游戏开发(四)游戏主循环
- ElasticSearch2.3.5源码研究(一)
- 勒索病毒入侵中国, Splunk建议网络立即进行区分和隔离设置
- Eclipse中Hibernate插件的安装
- Linux时间操作(time、gettimeofday)
- 驱动人生病毒清除教程
- 获取JSON文本(复嵌对象)转换指定JSON数据并Ajax实现数据初始可视化【附上echarts地图官方数据形式json文件数据】
- 雷达信号处理基础 多普勒频移
- MSP430F5529-基于ATK-IMU901角度传感器在UART的串口通信于数据显示
- 三国志战略版:Daniel_兵无常势分析
- Java服务器页面:JSP
- 基于SpringCloud分布式微服务+微信小程序实现短视频社交app设计
- sendEmail发送邮件
- Ubuntu 服务器初始化、系统安全加固、系统内核参数优化以及常用软件安装脚本分享...
- 非常详细的HTTPS分享