重複の可能性:
C#のインクリメント/デクリメント演算子の前後
次の簡単なスニペットについて考えてみます。
int x = 0;
int y = ++x + 1; // forks fine, gives y 2 (no doubt :) )
int x = 0;
int y = ++x++; // Error: The operand of an increment or decrement operator must be a variable, property or indexer.
同じステートメントで前後の増分または減分を混合することは、コンパイラーにとって望ましい機能ではないことは明らかです。
だが
- 実際、
++x++
と同じではありません++x + 1
か?エリック・リッパートがここで明らかにするすべての微妙な点を考慮に入れても。これらはすべて、オペランドとの関係ではなく、CSCが出力するメッセージの動作に関するものです。 - 実際、
x
変数ではありませんか?同様に、++x + 1
それはうまく構築され、オペランドは同じx
です。また、プリインクリメント演算子++でも同様に動作します。したがって、これはまだ有用な制限であり、コンパイラエラーで少し奇妙に思えます。たとえば、「プリインクリメント演算子とポストインクリメント演算子を同時に適用することはできません」と出力する方が意味がありませんか。 - そして、コードの使いやすさではなく、この制限の隠れたコンパイラーの観点を知っていますか?