2

重複の可能性:
プレフィックス/サフィックスの増分

演算子の優先順位に関する公式の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になります。 。

4

1 に答える 1

1

アップデート。これでは完全な答えは得られません。どうすれば 5 になるのか、はっきりとはわかりません。

私が以下に書いていることは、C++ に当てはまることに基づいています。それは、Precedence がステートメントの一部が実行される順序を制御しないのに役立つ可能性があり、1 つのステートメントの効果が自動的に更新されることはありません (少なくとも保証されていません)。ステートメント全体の変数。

例えば:

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 
于 2012-10-25T19:00:30.843 に答える