8

最近、演算子の優先順位に関する質問が非常に多いため、いくつかのコードを試してみたところ、次のようになりました。

int x = someNumber;
int y = --x++;

これは与える:

Error: unexpected type

required: variable
found: value

postfixよりも演算子の優先順位が高いという事実をJavaがどのように処理するかを知りたいと思ったので、これを試しましたprefix。これは、上記のステートメントが矛盾につながるように思われますが、これはこのエラーによって処理されると思います。

私の質問は 2 つあります。

  1. なぜこのエラーですか?正確にはどういう意味ですか?
  2. postfixよりも優先順位が高いのはなぜprefixですか? それには正当な理由があると確信していますが、私はそれを思い付くことができませんでした. おそらく、この未定義の動作は修正されるでしょうが、どういうわけかより多くの問題を引き起こすのでしょうか?
4

4 に答える 4

2

技術的には、式の一部のエンティティは「lval」または「rval」のいずれかです。「lval」は「左側の値」(の左側x = y)であり、に割り当てることができます。「rval」は「右側の値」であり、割り当てることはできません。「rval」が必要な場合は「lval」を使用できますが、その逆はできません。 「lvals」が必要です++--

「lval」は、単純な変数名、参照解除されたポインター、または配列インデックス式 (およびおそらく 2 ~ 3 個の他のもの) にすることができます。

于 2013-07-24T16:13:08.900 に答える