三元运算符的性能成本是多少

Mag*_*don 3 cpu performance pipeline ternary

我听说编译器非常聪明并且知道如何优化 if / else 语句。

我也听说过三进制是高性能的,因为它们通过 CPU 的指令管道更少。

根据我所听到的,让我澄清一下:

if / else 必须通过管道传递其条件并等待结果,然后才能执行结果计算。

然而,三元可以将结果的计算传递给 cpu,而无需等待布尔表达式通过管道。

那么,哪个更快,三元组还是 if / else ?

Ada*_*zyk 6

不会有性能差异,三元运算符只是一个语法糖。

来自 ISO/IEC 9899 C 标准(草案,第 90 页):

6.5.15 条件运算符

(……)

语义

评估第一个操作数;评估后有一个序列点。仅当第一个操作数不等于 0 时才计算第二个操作数;仅当第一个操作数等于 0 时才计算第三个操作数;结果是第二个或第三个操作数(以求值者为准)的值,转换为下面描述的类型。(……)

  • 只是为了备份你的答案:http://stackoverflow.com/questions/3565368/ternary-operator-vs-if-else (3认同)
  • @MagicalGordon 他们是一样的;唯一的细节是一个 (`if(c){a}else{b}`) 是一个语句,而另一个 (`c ? a : b`) 是一个表达式。C 标准草案将“?:”的机制描述为“if/else”:首先评估条件,出现序列点,然后评估“a”或“b”,但不能同时评估两者。编译器 _can_ 评估两者,如果这样做与仅通过 _as-if_ 规则评估一个的效果相同;但是如果评估任何一个都会导致副作用,那么你就不能这样做。 (2认同)