值传递和引用传递_C++ 中的值传递和引用传递

本文介绍了C++中函数参数的两种传递方式:值传递和引用传递。值传递会复制实参,修改副本不影响实参,且拷贝开销大;引用传递直接传实参地址,修改形参会反映到实参,复制成本低且易用。综合来看,C++一般优先使用引用传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 pass-by-value

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

adcfc5da9722053341767ad8ef116ed0.png

​用法示例:int FunA(string strTest);

这种做法有以下几个问题:

第一,如果在函数里修改传给函数的参数值,实际上我们修改的只是实参的副本,而在调用函数的位置,这个实参值本身没有改变;

第二,此过程中进行的副本拷贝动作会耗费系统的资源,如果拷贝的参数是比较复杂的 struct 或者 class 等类型,复制出一份副本的成本(时空开销)很大;

2 pass-by-reference

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

87466a0bf3d6ef275821e89d28d9f346.png

​用法示例:int FunA(string & strTest);

这种做法有以下几点好处:

第一,由于函数的参数传递的是把实参的地址拷贝给形参,因此形参和实参对应的是同一块内存地址,所以对形参的修改自然会反映到实参上;

第二,在 C++ 中,指针的地址是一个 int 类型,说以即使在 64 位系统中,指针地址的复制成本(8字节)也是可以接受的;

16cdf6b825260f89d5fd24ed395d2628.png

​第三,因为 C++ 规定引用不能为空,所以在函数中传进来引用可以直接使用,而如果传进来的是指针类型(实际上是值传递、引用传递之外的指针传递方式),那么还需要先判断指针是否为空,易用性不强。

3 总结

综合对比上述两种函数参数的值传递方式,可以看出在C++中,一般情况下都会优先使用“引用传递”。

例如:

int FunA(const string strTest) // 值传递

{

// some code

}

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

{

// some code

}

山东掌趣网络科技

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值