8.7 传引用调用

最后更新于:2022-04-01 06:21:48

C++中另一种可选择的参数传递机制被称为"传引用调用"。这种机制使得我们能传递一个结构体给程序并修改它。 例如,你可以通过交换两个坐标来得到某个点关于45度线的对称点。reflect函数最明显(但不正确)的写法是: ~~~ void reflect (Point p) //错误!! { double temp = p.x; p.x = p.y; p.y = temp; } ~~~ 这么写并不奏效,因为我们在reflect函数中所做的改变并不会影响调用者。 相反,我们必须指明要通过引用传递参数。为参数声明加上一个符号(&)即可。 ~~~ void reflect (Point& p) { double temp = p.x; p.x = p.y; p.y = temp; } ~~~ 现在我们以普通方式调用这个函数: ~~~ printPoint(blank); reflect(blank); printPoint(blank); ~~~ 程序输出与预期相符: ~~~ (3,4) (4,3) ~~~ 下图展示了我们为程序绘制的栈图: ![enter image description here](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-01_55e599952d35e.jpg) 参数p是blank结构的一个引用。引用通常用一个带箭头的点表示,箭头指向引用所指。 图中最重要的是要看到:引用对p做的任何改变同样会影响blank。 通过引用传递结构比按值传递更通用,这是因为被调用者也能修改结构。此外,由于系统不需要复制整个结构,这使得引用传递更快。另一方面,它的安全性下降了,因为很难追踪结构是在哪被修改的。尽管如此,在C++程序中,几乎所有的结构都是按引用传递的。本书中我会遵循这一习惯。
';