使用模版实现swap(x,y)函数,功能:交换x,y的值.
错误示范(这就是一个坑,要理解。。。值传递和地址传递的本质)
template<class T>
void swap(T x, T y) {
T temp;
temp = x;
x = y;
y = temp;
}
int main(int argc, char* argv[])
{
int a = 1;
int b = 2;
swap(&a, &b);//虽然看起来传的是地址,但是本职还是值传递,因为没有用上地址
printf("a=%d,b=%d",a,b);
return 0;
}
正确姿势
template<class T>
void swap(T& x, T& y) {
T temp;//T& 不是一个类型,引用就是起别名,可以改变值,但是不可以改变地址,指针可以指向任意地方不安全,底层实现是一样的
temp = x;
x = y;
y = temp;
}
int main(int argc, char* argv[])
{
int a = 1;
int b = 2;
swap(a, b);
printf("a=%d,b=%d",a,b);
return 0;
}