3項演算子の是非についてはいろいろありますが、はたしてどっちがいいのでしょうか?
やりたいことは
fixstatが過去最大(max)より大きかったらmaxに代入
fixstatが過去最少(min)より小さかったらminに代入
どれでもないならスルー
3項演算
Re: 3項演算
これはあくまでも個人的意見なのですが、if文と三項演算子はそもそも何者なのかを考えると、使い分けのヒントになると思います。
if文というのは「制御文」で、「条件に応じて処理を分岐させる」のが役割です。
よって次のようなコードが書けます。 これは「hogeが真なら関数func1を実行し、偽ならfunc2を実行する」というコードですね。
さてそれに対し三項演算子ですが、これは「演算子」です。「演算子」というのは「いくつかの値を受け取り、それに応じた値を返す」ものです。例えば加算演算子"+"は、数を二つ受け取り、その和を返します。別の例として関係演算子"=="は両辺の値が等しいならtrueを、等しくないならfalseを返します。
三項演算子も同じです。三項演算子の場合三つの値を受け取り、それに応じて値を返します。 よって、結局のところ「条件によって全く違う処理をさせる」ことが目的ならif文で分岐させ、「条件によって違う値を返させる」ことが目的なら三項演算子を使うのがスマートではないかと思います。なので私の意見としては、今回のケースではif文より三項演算子を使うのが適切ではないかと思います。
また、h1j1k1様が提示された最大値や最小値を求めるようなケースであればこんな書き方もいいのではないかと思います(私はいつもこうしています)。 お疲れさまでした。
if文というのは「制御文」で、「条件に応じて処理を分岐させる」のが役割です。
よって次のようなコードが書けます。 これは「hogeが真なら関数func1を実行し、偽ならfunc2を実行する」というコードですね。
さてそれに対し三項演算子ですが、これは「演算子」です。「演算子」というのは「いくつかの値を受け取り、それに応じた値を返す」ものです。例えば加算演算子"+"は、数を二つ受け取り、その和を返します。別の例として関係演算子"=="は両辺の値が等しいならtrueを、等しくないならfalseを返します。
三項演算子も同じです。三項演算子の場合三つの値を受け取り、それに応じて値を返します。 よって、結局のところ「条件によって全く違う処理をさせる」ことが目的ならif文で分岐させ、「条件によって違う値を返させる」ことが目的なら三項演算子を使うのがスマートではないかと思います。なので私の意見としては、今回のケースではif文より三項演算子を使うのが適切ではないかと思います。
また、h1j1k1様が提示された最大値や最小値を求めるようなケースであればこんな書き方もいいのではないかと思います(私はいつもこうしています)。 お疲れさまでした。
Re: 3項演算
min, max であれば、
https://ja.cppreference.com/w/cpp/algorithm/max
std::max - cppreference.com(ja)
https://www.gesource.jp/weblog/?p=7660
Visual Studio で std::min()/std::max() がエラーになるときの回避策 - 山本隆の開発日誌(ja)
std::min と std::max を使うべき。
https://ja.cppreference.com/w/cpp/algorithm/max
std::max - cppreference.com(ja)
https://www.gesource.jp/weblog/?p=7660
Visual Studio で std::min()/std::max() がエラーになるときの回避策 - 山本隆の開発日誌(ja)
std::min と std::max を使うべき。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: 3項演算
Compiler Explorerで試したところ、
if文を用いても三項演算子を用いてもcmovg命令を用いた全く同じコードに最適化される例を確認できました。
あまり賢くない特定のコンパイラを使わなければならない上にパフォーマンスが非常に重要である、
「間違った」方を使うとテストで不正解にされたり怒られたりする、
などの特別な事情が無いのであれば、好きな方を使えばいいでしょう。
if文を用いても三項演算子を用いてもcmovg命令を用いた全く同じコードに最適化される例を確認できました。
► スポイラーを表示
「間違った」方を使うとテストで不正解にされたり怒られたりする、
などの特別な事情が無いのであれば、好きな方を使えばいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)