6. 交换函数
题目: 解释为什么下面程序的交换函数没有把形参 x 和 y 所对应的实参的值交换。如何修改代码,使实参的值得到交换? 原交换程序: 1 void swap(int x, int y) { 2 int temp = x; 3 x = y; 4 y = temp; 5 } 思路: 在C++中,参数传递方式有三种,分别为传值,传地址,传引用。在以上程序中,是按照传值的方式进行的。在实参传入时,将副本给形参。(如果是内置数据类型,则进行复制;如果是用户自定义数据类型,则调用复制构造函数)。传值不会改变实参,想要改变实参,则应该传指针或引用。这里我选择传引用。 修改后的程序: 1 template <typename T> 2 void new_swap(T& a, T& b) { 3 T temp = a; 4 a = b; 5 b = temp; 6 } 在上面修改后的程序里,有几个地方需要解释。 第一,返回值为 void,因为进行交换不需要返回值。 第二,temp 的类型为 T,而不是 T&,因为 a 是一个 T 类型的,并且 a 是一个引用,所以 temp 也为 T 类型。 代码: 1 #include <iostream> 2 using namespace std; 3 4 template <typename T> 5 void new_swap(T& a, T&