三項演算子の使い方でミスしたので記録しておきます.
三項演算子とは
a ? b : c
とすると, aがTrueのときb,Falseのときcになる演算子です.
例えば
std::cout << (true ? 1 : 0) << std::endl;
とかでは1が出力されます.
優先順位
C++での三項演算子の優先順位はかなり低いです.
私はこんなミスをしました(本当は違いますがこんな感じのやつです).
int x = 100 - (a == 1) ? 1 : 0;
a=1のとき1を引いてくれることを期待したのですが結果はx=1となりました.
これは三項演算子の条件部が(a == 1)ではなく100-(a == 1)になっていたことが原因です.
この場合書き方として
int x = 100 - (a == 1 ? 1 : 0);
や
int x = 100 + (a == 1 ? -1 : 0);
の方がいいのかなと思いました.
まとめ
三項演算子は括弧でくくろう.