C编程语言中的值传递pass-by-value和引用传递pass-by-reference介绍
目录
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
}