if (hoge || foo && bar) { // ... }
&&演算子の方が優先度が高いため、上記のコードは
if (hoge || (foo && bar)) { // ... }
と解釈されるが、自分の脳内ではなぜか
if ((hoge || foo) && bar) { // ... }
となっていたためにしょぼいバグを生んでいた。欝。
Cでも論理和より論理積のほうが優先順位高いし、なんでこんなコード書いてしまったのか理解できない。自信ないときは括弧付けとけと。1年生の間違いだよなぁ……。戒めのために晒しておく。