C++通过引用实现变量交换时两变量最终值相同问题求助
问题排查与解决方案
核心问题根源
问题出在main函数中引用变量的声明语法错误:
int& ref_a = a, ref_b = b;
C++的声明语法中,修饰符&仅作用于紧随它的单个声明变量,不会作用于同一行逗号分隔的后续变量,上述代码实际等价于:
int& ref_a = a; // ref_a是a的引用 int ref_b = b; // ref_b是独立的普通int变量,仅初始值等于b,不是b的引用
调用RefSwap时,实际传入的是a的别名ref_a和独立变量ref_b,函数交换的是a和ref_b的值,原始变量b全程没有被修改,仍然保留初始值10,因此最终输出10 10,和运行结果一致。
修正方案
可任选以下任意一种方案修改代码:
- 方案1:给同一行声明的所有引用都加上
&修饰符int &ref_a = a, &ref_b = b; - 方案2:分开声明引用变量,避免语法歧义
int& ref_a = a; int& ref_b = b; - 方案3:不需要额外定义中间引用变量,直接把
a、b传入交换函数即可(函数形参本身就是引用类型,直接传变量会自动绑定引用)// 删掉ref_a、ref_b的定义行,直接调用 RefSwap(a, b);
修改后重新运行代码,即可得到预期输出10 3。
内容的提问来源于stack exchange,提问作者Abhinav Jha
相关产品推荐
相关产品推荐

