H. *_*VON 0 c++ swap reference
我想用一个函数交换两个变量。我创建了两个函数my_swap_f1和my_swap_f2;my_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?
使用引用而不是指针实现交换的主要原因之一是避免代码中的所有*这些:&
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”,但是当然您不能更改这样的对象的地址。
| 归档时间: |
|
| 查看次数: |
7433 次 |
| 最近记录: |