本文主要介绍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++中,一般情况下都会优先运用“引证传递”。
例如:
