目录

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
}