![]() |
1
50
性能
三元运算符在性能上不应与编写良好的等效运算符不同
你只能做些什么?:
如果您正在初始化一个常量或引用,或者正在计算成员初始化列表中要使用的值,那么
简洁代码的因子分解
使用的主要原因
…只比。。。
…基于可读性,如果与非常缺乏经验的程序员打交道,或者某些术语足够复杂,以至于
等价物
这是很多额外的函数调用,编译器可能会优化,也可能不会优化。 命名临时对象不能改善上面的if/else畸形吗?
如果表达式
功能差异:统一结果类型考虑:
在上面的条件运算符版本中,
不能将表达式与
强调:行动前/行动后的价值选择需要价值有一个不同的重点:
一个
在不同的情况下,这两种方法都可以更好地反映程序员对代码的“自然”透视图,并使其更易于理解、验证和维护。你可能会发现自己在编写代码时根据考虑这些因素的顺序来选择一个而不是另一个——如果你已经开始“做某事”,那么你可能会使用几个(或几个)值中的一个来做,
|
![]() |
2
8
好。。。 我用GCC和这个函数调用做了一些测试:
生成的带有gcc-O3的汇编代码有35条指令。 if/else+中间变量的等价代码有36个。如果嵌套if/else使用3>2>1,我得到44。我甚至没有尝试将其扩展为单独的函数调用。 现在我没有做任何性能分析,也没有对生成的汇编程序代码进行质量检查,但是在这样一个没有循环的简单的地方,我相信更短更好。 看来三元运算符终究还是有些价值的:-) 当然,只有在代码速度是绝对关键的情况下。当嵌套时,If/else语句比(c1)这样的语句更容易阅读?(c2)?(c3)?(c4)?:1:2:3:4。把大表达式作为函数参数是 不 很有趣。 还要记住,嵌套的三元表达式使得重构代码——或者通过在某个条件下放置一堆方便的printfs()进行调试——困难得多。 |
![]() |
3
7
在我看来,三元运算符相对于普通if语句的唯一潜在好处是它们能够用于初始化,这对于
例如。
如果不使用函数cal,使用if/else块也不可能做到这一点。如果您碰巧有很多这样的const情况,您可能会发现使用If/else正确初始化const而不是赋值有一点好处。测量一下!可能根本无法测量。我倾向于这样做的原因是,通过将其标记为const,编译器知道我以后何时执行可能/可能会意外更改我认为已修复的内容的操作。 实际上,我要说的是,三元运算符对于常量正确性很重要,常量正确性是一个很好的习惯:
|
![]() |
4
3
你认为那里 必须是 当事实上有许多语言放弃“if else”语句而使用“if else”表达式时,两者之间的区别(在这种情况下,它们甚至可能没有不再需要的三元运算符) 想象:
无论如何,三元运算符是一些语言(C,C,C,+,Java等)的表达式。 不 有“如果有的话”的表达,因此 起着独特的作用 在那里。 |
![]() |
5
1
如果你从表现的角度担心这一点,那么如果两者之间有什么不同的话,我会非常惊讶。 从外表和感觉的角度来看,这主要取决于个人喜好。如果条件很短,真/假部分很短,那么三元运算符就可以了,但是在If/else语句中,任何更长的都会更好(在我看来)。 |
![]() |
DIES · 多动作语句的公共if或三元运算符? 7 年前 |
![]() |
Leo Messi · 三元内部的空合并运算符 7 年前 |
![]() |
Haikel · 是否可以将这两行写为三元运算符? 7 年前 |
![]() |
JustADude · setter与Classic If中的三元运算 7 年前 |
![]() |
Franck Boudraa · Ruby/Rails三元和范围 7 年前 |