在Python,可以容易地與像這樣的表達式交換2個變量的值:魔術在C++與此表達式x = Y X +(Y = X)
x, y = y, x
在C++中,在另一方面,如果你想交換2個變量的值,您通常使用一個臨時變量來存儲您的變量之一的值,這樣的事情:
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 = 0的
- x的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';
}
}
我們已經看到,交換完成,但我的編譯器給了我這樣的警告:
main.cpp中:28:22:警告:未測序修改和訪問爲 'Y' [-Wunsequenced]
如果有一個警報,I S這不是一種交換2個變量值的新標準方式,而只是這位教授的一個巧妙的解決方法。
爲什麼這種方法在C++中沒有標準化,爲什麼它的工作原理?
提示:http://en.wikipedia.org/wiki/Sequence_point –
std :: swap()也是consise – stefaanv