8.10 按引用传递其他类型

优质
小牛编辑
142浏览
2023-12-01

不单是结构能按引用传递,所有其他我们见过的类型同样可以。例如,我们可以这么写,来交换两个整数:

void swap (int& x, int& y)
{
   int temp = x;
   x = y;
   y = temp;
}

用普通方式调用这个函数:

int i = 7;
int j = 9;
swap (i, j);
cout << i << j << endl;

程序输出97。你可以为程序画出栈图来说服自己这是正确的。如果参数x和y声明为普通参数(没有加上&符号),则swap函数无效。它会修改x和y,而对i和j没有影响。

当人们开始通过引用传递东西,例如整型时,他们经常试图使用表达式作为引用参数。如:

int i = 7;
int j = 9;
swap (i, j+1);            //错误!

这是不合法的,因为表达式j+1并不是一个变量---它并没有占据一个引用可以指向的地址。弄清楚什么类型的表达式可以传引用是一个小技巧。目前一个好的规则是引用参数必须是变量。