【发布时间】:2014-01-15 01:04:56
【问题描述】:
我偶然发现了这段代码,用于在不使用临时变量或按位运算符的情况下交换两个整数。
int main(){
int a=2,b=3;
printf("a=%d,b=%d",a,b);
a=(a+b)-(b=a);
printf("\na=%d,b=%d",a,b);
return 0;
}
但我认为这段代码在交换语句a = (a+b) - (b=a); 中具有未定义的行为,因为它不包含任何确定评估顺序的序列点。
我的问题是:这是交换两个整数的可接受解决方案吗?
【问题讨论】:
-
在 C++ 中只使用 std::swap
-
为什么要为了几个字节写出难以阅读的代码?
-
@EdHeal 逐字节制作兆字节(无法抗拒)
-
@EdHeal “为了几个字节”听起来像电影中的陈词滥调“为了几个生命”。如果你从这个角度来看,你听起来就像一个怪物。 |=^]
-
请记住,保存的“代码行”和“变量”不会加速您的程序的性能...相反,它们可能会损害它。我敢打赌,如果您查看链接的 ASM,它可能需要比简单的解决方案更多的指令和更多的周期来执行。
标签: c++ c swap undefined-behavior sequence-points