在PHP手冊,operator precedence section的輸出,有這樣的例子:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
我理解的行爲是由於以下原因未定義:
由於x + y = y + x
口譯員可以自由評估x
和y
添加任何順序,以優化速度和/或內存。我在看完C code example in this article後得出這個結論。
我的問題是,上述的PHP代碼的輸出應爲4
不管表達和子表達式進行求值,其方式:
- OP1 = ++ $ A => $ a = 2的,op1 = 2; op2 = $ a ++ => op2 = 2,$ a = 3; 2 + 2 = 4
- op1 = $ a ++ => op1 = 1,$ a = 2; op2 = ++ $ a => op2 = 3,$ a = 3; 1 + 3 = 4
5從哪裏來?還是應該更多地瞭解運營商的工作方式?
編輯:
我在Incrementing/Decrementing Operators節一直盯着,但仍無法爲什麼5
++ $一個弄明白:預增 - 增加$一個接一個,那麼返回$ a。
$ a ++:後增值 - 返回$ a,然後將$ a加1。
運行此代碼時,你真的得到5印嗎? – Ranty
不,我總是得到4幾個版本的PHP。它是_may_這個詞,意思是我可以運行這個代碼一百萬次獲得reesult 4,但是沒有_guarantee_。 –
@ H2CO3:我更感興趣知道_爲什麼5_。 –