引数の評価順序
- kazu_yamamoto
- 12432
- 2
- 7
- 4
int x = 0; int main() { printf("%d ", (x = 3) + (x = 4)); printf("%d\n", x); return 0; } これどうして 7 4 以外にもなり得るのかなぁ
2013-10-02 10:07:01@repeatedly !!そうなのですか…!処理系によって評価順が変わる、ということですか?(驚)Σ(・□・;)同じ言語なのに
2013-10-02 10:12:02@kazu_yamamoto http://t.co/uKPtGwTbT6 Python の場合これが適用されて左から右になるはずです。
2013-10-02 10:20:59.@chomado @chiguri 引数の評価順序に規定は無いのが C/C++ の真理なので引数に副作用のあるものを書くと焼かれます(最適化で評価順変わったりもするので)
2013-10-02 10:24:39@objectxplosive それはC++03までの話ですね。C++11ではスレッドのメモリモデルとの兼ね合いで、引数の評価順序は前から順番であることが規定されました。
2013-10-02 10:25:45.@kazu_yamamoto Smalltalkは左から右。QT http://t.co/fnpNyzSJ0s The <keyword argument> clauses of a <keyword message> are evaluated left to right.
2013-10-02 10:27:09.@cpp_akira をを、規定されたスかφ(.. )…一昔前の奴だと引数 push の関係で後ろからの奴もありましたねえ(笑)
2013-10-02 10:28:53@kazu_yamamoto 「複数の引数」ではなく組の要素ですが、Standard MLの操作的意味論は確かleft-to-rightだったと思います(要確認)
2013-10-02 10:37:44.@kazu_yamamoto 超安直にコンパイラ作ると、右からの方が楽かもしれない(引数は全部 stack 渡しで)左からだと少し面倒かも
2013-10-02 10:43:05