被演算子の評価順序について
「基礎から学ぶC++の教科書」という本で
大部分の演算において、被演算子の評価順序は決まっていません。
たとえば、式A+式Bという演算があったときに、式Aと式Bのどちらが先に評価されるかは決まっていません。
ですから、評価の順序に依存するようなコードを書かないように注意してください。次のコードの実行結果は、おそらく納得できるものにはならないでしょう。
int n = 1;
n = --n / --n;
cout << n << endl;
と書いてありました。
これを実際に実行してみると1と表示され、確かに予想していなかった結果でした。
ただ、これは評価順序が不定だからという理由では納得できません。
何故なら左から評価すれば、
n=0/-1
なので、0。
右から評価すれば
n=-1/0
で0で除算する事になりエラーとなり、
評価順序がどちらの場合も1にはならないように思えるからです。
何故1になるのでしょうか?
「同じ数/同じ数」という形で評価されて1となっていると仮定すると、
同時に評価されていると考える事できますが、
そのような事はあるのでしょうか?