作者czm (czm)
看板C_and_CPP
标题[讨论] 为何不支援三一律?
时间Tue Sep 25 05:46:12 2018
常常有两个数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
1F:嘘 KanzakiHAria: c++20 Three-way comparison 09/25 07:39
2F:→ LPH66: 不过我看了一下 proposal, 未来的 <=> 不会有三分支语意 09/25 08:07
3F:→ tinlans: 因为 C++ 是在 CPU 很弱的时代就出现的语言。 09/28 08:14
4F:→ tinlans: 不过就算语言本身不支援,编译器还是可以设法帮你合出来 09/28 08:14
5F:→ Killercat: 真不行就学MS套Macro跑compiler internal XD 09/28 20:18
6F:推 Schottky: 我比较想要支援进位 flag 09/29 19:30
7F:推 yvb: 不同意 3F. wiki Three-way_comparison => arithmetic IF 10/02 20:44
8F:→ yvb: 同意 4F 编译器可以. 试过 gcc -O2 会得到原PO期望的组语样态 10/02 20:48