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