在Python中,你可以使用如下表达式轻松交换两个变量的值:
我们已经看到了变量交换的过程,但是我的编译器给出了以下警告:
为什么这种方法没有被C++标准化,它为什么能够正常工作?
x, y = y, x
相比之下,在C++中,如果你想交换两个变量的值,通常会使用一个临时变量来存储其中一个变量的值,就像这样:
int var1 = 100;
int var2 = 200;
int temp = var1;
var1 = var2;
var2 = temp;
这很简单,但你需要写很多代码。
我一直在跟随一位讲授C++课程的教授,他发现了一种新的紧凑方式,在魔术般的方式下交换2个变量的值:
int x = 200;
int y = 100;
x = y - x + (y = x);
这似乎令人难以置信,但它可以在他使用的编译器和我的 Apple LLVM version 6.0 (clang-600.0.56)
中都工作。
看起来表达式被解释为以下内容:
- (y = x) // 返回x的值
- -x + x = 0
- x = y + 0
- x = y
- y = x //最终,y接收到x的初始值
如果我尝试在循环中交换一些变量的值,它似乎也可以工作:
for (int i = -10; i <= 10; i++) {
for (int j = 10; j >= -10; j--) {
int x = i, y = j;
x = y - x + (y = x);
std::cout << "x = " << x << "\ny = " << y << '\n';
}
}
我们已经看到了变量交换的过程,但是我的编译器给出了以下警告:
如果有警告,我认为这不是C++中交换两个变量值的新标准方式,而只是这位教授巧妙的解决方法。main.cpp:28:22: 警告:对'y'进行了未排序的修改和访问[-Wunsequenced]
为什么这种方法没有被C++标准化,它为什么能够正常工作?