- ベストアンサー
前置単項演算子の優先順位や言葉の定義
javascriptの場合 ++ や -- は前置きなら右結合、後置きなら左結合ということのようですが、この結合規則の具体例ってどういったものでしょうか。 そして例えば++a--だとどっちが先に評価されるのでしょうか。(結果は同じだとしても) また2項演算子の + や - などの結合規則は理解できるのですが、単項演算子の場合に結合規則が具体的に何のことを言っているのかどうもよくわかりません。 例えば !--abc や ++a-- のように単項演算子を並べた場合も、どのように結合して何をもって右とか左と言うのか、という点を明確にしたいです。 (特にjavascriptに限った話ではないのでjavaやcなど他の言語での解説でもかまいません) いままであやふやにしてしまっていた言葉や定義をここではっきりしたいです。 具体的な例で示していただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ECMAScript 5.1 では後置演算子の方が前置演算子よりも優先順位が高いので ++a-- は (合法だとして) ++(a--) と解釈されます. つまり「-- してから ++」となる. あと, 単項演算子の結合規則は実質的に単項演算子の位置だけで決まってしまいます. つまり, 前置演算子は右結合, 後置演算子は左結合としか解釈の仕様がありません. どういうことかというと, 中置 2項演算子では a+b+c という式を (a+b)+c a+(b+c) のどちらとも解釈できるため, (+ の場合) 左結合と指定することで前者の解釈を強制しています. ところが, 前置演算子では !~+--a のように書いても !(~(+(--a))) としか解釈できないので, 結合規則を指定する意味はありません. なお, 結合規則は「同じ優先順位を持つ演算子同士の間でどちらを優先するか」を規定するものなので, 最初の例のように優先順位が異なる演算子の間では考える必要はありません.
お礼
とても参考になりました。 ありがとうございました!