交换函数如何与引用一起使用?

H. *_*VON 0 c++ swap reference

我想用一个函数交换两个变量。我创建了两个函数my_swap_f1my_swap_f2my_swap_f2工作正常,但my_swap_f1抛出 2 个错误(在下面注释掉)。

#include<iostream>
using namespace std;
int my_swap_f1(int &a,int &b){

    int *temp;
    temp=&a;
    //&a=&b;   //throw error
    //&b=temp;    //throw error
}

int my_swap_f2(int *a,int *b){
    //works perfectly
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}

int main(){
    int a=10;
    int b=20;
    int temp=0;
    cout<<"Before Swap"<<endl;
    cout<<a<<endl;
    cout<<b<<endl;

    my_swap_f1(a,b); //send value as perameter
    //my_swap_f2(&a,&b); //send address as perameter
    cout<<"After Swap"<<endl;
    cout<<a<<endl;
    cout<<b<<endl;
}
Run Code Online (Sandbox Code Playgroud)

问题:为什么会抛出错误my_swap_f1,如果我想交换怎么办my_swap_f1

for*_*818 5

使用引用而不是指针实现交换的主要原因之一是避免代码中的所有*这些:&

int my_swap_f1(int &a,int &b){
    int temp;
    temp = a;
    a = b;             // a/b refer to the parameters that were passed
    b = temp;          // modifying a reference is the same as modifiying the original
}
Run Code Online (Sandbox Code Playgroud)

那行:

&a = &b;
Run Code Online (Sandbox Code Playgroud)

无法工作,因为&a( 的地址a) 是右值。粗略地说,右值是无法赋值的东西,它只能出现在赋值的右侧。如果它有效,则意味着类似:“获取地址a并将其设置为地址b”,但是当然您不能更改这样的对象的地址。