首页 新闻 会员 周边 捐助

为何代码不等价,求解释

0
[已解决问题] 解决于 2012-08-24 09:32
1 void swap1(int &a,int &b)
2 {
3     int x,y;
4     x=a;y=b;
5     x^=y^=x^=y;
6     a=x;b=y;
7 }

1 void swap2(int &a,int &b)
2 {
3   a^=b^=a^=b;
4 }
1 void swap3(int *a,int *b)
2 {
3     (*a)^=(*b)^=(*a)^=(*b);
4 }

 

swap1可以正常交换,swap2不可以,swap3也不可以。

而如果在main函数中直接写a^=b^=a^=b;也是可以的。

求解释?

jpbirdy的主页 jpbirdy | 菜鸟二级 | 园豆:256
提问于:2012-08-10 13:39
< >
分享
最佳答案
0

三种方法都可以,把你调用 swap1,swap2,swap3的代码贴出来。

奖励园豆:5
Launcher | 高人七级 |园豆:45050 | 2012-08-10 14:10

你是用VC调试的吗?

用CodeBlocks编译下就不可以。

调用方法没什么特别的。

jpbirdy | 园豆:256 (菜鸟二级) | 2012-08-10 14:34

@jpbirdy: 对,VC++。如果你没写错调用代码,那么这就是CodeBlocks的问题,你得问他们的技术支持去,因为这段代码是标准C++语法,CodeBlocks不管怎么编译它都应该支持,除非你的代码并不像看上去这么简单。

Launcher | 园豆:45050 (高人七级) | 2012-08-10 14:56

@程序猿.码农: 那就是VC++编译器的问题。因为CodeBlocks不自带编译器的,用的是标准GUN GCC的编译器,而VC++不是。不过理论上来说VC++执行的是正确的。我猜测,是这种连续赋值在和指针调用相关的时候,生成的中间变量有问题。谢谢你了~

jpbirdy | 园豆:256 (菜鸟二级) | 2012-08-10 15:22
其他回答(1)
0

传值问题。。。。后两个函数值的交换对main函数里的a和b没有影响吧

羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-10 13:55

好吧。呵呵。

支持(0) 反对(0) jpbirdy | 园豆:256 (菜鸟二级) | 2012-08-10 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册