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

看板C_and_CPP作者 (czm)時間7年前 (2018/09/25 05:46), 7年前編輯推噓1(215)
留言8則, 6人參與, 7年前最新討論串1/1
常常有兩個數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

09/25 07:39, 7年前 , 1F
c++20 Three-way comparison
09/25 07:39, 1F

09/25 08:07, 7年前 , 2F
不過我看了一下 proposal, 未來的 <=> 不會有三分支語意
09/25 08:07, 2F

09/28 08:14, 7年前 , 3F
因為 C++ 是在 CPU 很弱的時代就出現的語言。
09/28 08:14, 3F

09/28 08:14, 7年前 , 4F
不過就算語言本身不支援,編譯器還是可以設法幫你合出來
09/28 08:14, 4F

09/28 20:18, 7年前 , 5F
真不行就學MS套Macro跑compiler internal XD
09/28 20:18, 5F

09/29 19:30, 7年前 , 6F
我比較想要支援進位 flag
09/29 19:30, 6F

10/02 20:44, 7年前 , 7F
不同意 3F. wiki Three-way_comparison => arithmetic IF
10/02 20:44, 7F

10/02 20:48, 7年前 , 8F
同意 4F 編譯器可以. 試過 gcc -O2 會得到原PO期望的組語樣態
10/02 20:48, 8F
文章代碼(AID): #1RgLicZH (C_and_CPP)