新しい変数を使わずに、2つの変数を入れ替える方法

最近、CodeIQpaizaでいろいろ問題を解いています。

で、そこで、前にこういう問題が出ていたんですよね。表現は変えていますが、内容は同じです。

【問題】
一般的に、変数aとbの値を入れ替えるときは、次のようにします。
c = a; // 一時的にaをcに入れておく
a = b; // aがbの値になる
b = c; // bにaの値が入る

上の例では、変数の交換のために新しい変数cを使っています。
このような新しい変数を使わずに、変数を交換することはできるでしょうか。

実は、前に書いた「[javascript] 配列をうまく受け取る方法」の中で、javascriptの場合の答えを書いているんですよね。

[a, b] = [b, a];

ただ、これは一般的な言語では使えないんですよね。で、僕が考えた方法を載せておきます。ちなみに、解答期限は過ぎています。

これも言語によっては使えない気もしますが。

一応、簡単に解説も書きます。まず、一番初めに処理されるのは、「b-a」の部分ですね。つぎに、その後の「+」を処理しようとしますが、その前に「(b=a)」が実行されます。これでbにaの値が入ります。この結果、右辺は「b-a+a」ということになります。つまり、元のbの値になるわけですね。これがaに入ると。

これにより、aとbの値が交換されるわけですね。ひらめくと気持ちいいですが、あんまり実用性はない気がします。。。

前の記事:
エクセルで作った画像を、ペイントを使わずに保存する方法
次の記事:
「保守性が劇的に上がるPHPのスマートな書き方12選」ネタにマジレスしてみる件