本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.4节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 传引用语义
C和C++代码精粹
除非被告知用别的方法,否则C++总是通过值向函数传递参数。这意味着函数是局部地使用了每一个参数的拷贝。这种传递方式的结果是一个函数不可能在所调用的程序中改变对应的实参值。考虑下面的试图交换两个整型变量值的程序段:
void swap(int x, int y)
{
int temp = x;
x = y;
y = temp;
}
诸如swap(a,b)这样的调用对于a和b都不会产任何效果。在退出函数后允许改变函数固定实参值的方式叫做“传递引用”。
程序清单2.6 用指针交换函数中实参的值
// swap2.cpp: 一个有用的交换函数
#include <iostream>
using namespace std;
void swap(int*, int*);
main()
{
int i = 7, j = 8;
swap(&i,&j);
cout << "i == " << i << ", j == " << j << endl;
}
void swap(int* xp, int* yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
//输出:
i == 8, j == 7
在C语言中,可以通过传递想要改变其值的参数的指针来仿真传引用语义。可以通过指针,改变在调用程序中的变量值(参见程序清单2.6)。传递引用对于大型对象和在面向对象系统中是很普通的,在面向对象操作中,指向一个对象的指针称为“句柄”。正如第1章中所解释的那样,通过引用,C++也直接支持传递引用。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。