上operator precedence官方PHP手冊中有如下奇怪的代碼和註釋吧:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
燦有人解釋我爲什麼說在某些情況下可能會打印4或5? 對我來說,很明顯,它會首先增加$ a(值爲2),然後總結$ a和$ a(4),然後纔會將$ a值更改爲3.所以,結果應該是4.
上operator precedence官方PHP手冊中有如下奇怪的代碼和註釋吧:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
燦有人解釋我爲什麼說在某些情況下可能會打印4或5? 對我來說,很明顯,它會首先增加$ a(值爲2),然後總結$ a和$ a(4),然後纔會將$ a值更改爲3.所以,結果應該是4.
更新。這是而不是給出了一個完整的答案。我無法清楚地顯示你將如何得到5.
我在下面寫的是基於C++的真實情況,它可能有助於優先級不控制執行語句部分的順序,以及一個語句的效果不會自動(至少不能保證)更新語句中的變量。
例如:
a=1
b=a++ ; // b is 1, a is 2
c=++a ; // c is 3, a is 3
現在想想寫C + B。這將評估爲1 + 3 = 4。但是當你寫出
a++ + ++a
從語言中不能保證a會在每個單獨的增量後被更新。
所以,你可能也得到
a=1
b=a++ ; // b is 1, a is 2
a=1 ;
c=++a ; // c is 2, a is 2
在3
產生的效果這其實沒有什麼用的優先級,甚至評估順序。 例如,如果變量保證在語句中更新,翻轉評估順序,無論如何,您都會得到4。
a=1
c=++a ; // c is 2, a is 2
b=a++ ; // b is 2, a is 3
還不清楚 –
我會進一步澄清。 –
從你的解釋中我瞭解到$(a ++)中$ a的更新並不意味着在($ a ++)中$ a的值仍然等於1.我說得對嗎? –
請不要寫這樣的代碼 - 它是不清楚和不可讀的。如果你沿着這條大道走下去,你將來會遇到各種各樣的問題,編寫代碼。 –
@Ed Heal爲了公平對待他,那不是他的代碼。它是從PHP手冊複製並粘貼的。 – Kenzo
@Kenzo - 這就是爲什麼我使用評論功能。 –