我听说编译器非常聪明,知道如何优化if / else语句。
我也听说三元运算符具有高性能,因为它们通过CPU的指令流水线较少。
让我澄清一下,基于我所听到的:
if / else必须将其条件通过管道传递并等待结果,然后才能执行结果的计算。
然而,三元运算符可以将两个结果的计算都传递给CPU,而无需等待布尔表达式通过管道。
那么,哪个更快,三元运算符还是if / else?
我也听说三元运算符具有高性能,因为它们通过CPU的指令流水线较少。
让我澄清一下,基于我所听到的:
if / else必须将其条件通过管道传递并等待结果,然后才能执行结果的计算。
然而,三元运算符可以将两个结果的计算都传递给CPU,而无需等待布尔表达式通过管道。
那么,哪个更快,三元运算符还是if / else?
if/else
语句,但在更复杂的编译器的SSA转换阶段,两者之间的任何区别都会被消除。 - Iwillnotexist Idonotexist?:
的语义禁止评估未选择的一侧,就像if() else
一样。编译器只有在遵守as-if规则的情况下才能评估两个执行路径,即编译器可以证明额外的计算不会产生任何可观察的副作用。同样,这对于?:
和if() else
都是完全相同的情况。 - cmaster - reinstate monica?:
。只有聪明的编译器才能证明这样的事情,并在这里使用条件移动。 - cmaster - reinstate monicad = c ? a : b
示例,其中a
和b
不会产生副作用。否则需要完整的if/else
。 - Iwillnotexist Idonotexist?:
的实例,而条件移动代码则不能。因此,一个天真的、非优化的编译器将始终选择将所有?:
的实例编译成分支代码,避免决定是否有更好的选择。 - cmaster - reinstate monica