[討論] 為何不支援三一律?

作者: czm (czm)   2018-09-25 05:46:12
常常有兩個數a,b 需要判斷 a>b 或 a=b 或 a<b
於是就要寫成
if( a>b)
{ ;;; }
else
if( a==b)
{ ;;; }
else
{ ;;; }
// 需要比較兩次 與 一些jmp
可是應該很多cpu都有支援 類似如下intel 的指令
cmp a,b
jg xxx
je yyy
jl zzz
;只要比較一次 就可由旗號得知三一律的結果 直接走該走的分支
為何c++ 不實做三一律?
例如這樣 (a??b) ?> do_something ?= do_something ?< do_something ;
※ 編輯: czm (1.163.137.249), 09/25/2018 06:01:11
作者: KanzakiHAria (神崎・H・アリア)   2018-09-25 07:39:00
c++20 Three-way comparison
作者: LPH66 (-6.2598534e+18f)   2018-09-25 08:07:00
不過我看了一下 proposal, 未來的 <=> 不會有三分支語意
作者: tinlans ( )   2018-09-28 08:14:00
因為 C++ 是在 CPU 很弱的時代就出現的語言。不過就算語言本身不支援,編譯器還是可以設法幫你合出來
作者: Killercat (殺人貓™)   2018-09-28 20:18:00
真不行就學MS套Macro跑compiler internal XD
作者: Schottky (順風相送)   2018-09-29 19:30:00
我比較想要支援進位 flag
作者: yvb   2018-10-02 20:44:00
不同意 3F. wiki Three-way_comparison => arithmetic IF同意 4F 編譯器可以. 試過 gcc -O2 會得到原PO期望的組語樣態

Links booklink

Contact Us: admin [ a t ] ucptt.com