【发布时间】:2014-06-01 20:05:38
【问题描述】:
考虑使用您选择的语言(例如,Java、C、C#...)中的 switch 语句。当然,case 语句的顺序很重要,如果有失败,但假设每个case 都有一个break,所以顺序没有语义重要性。
case 语句的顺序在考虑优化时是否重要?是按升序对案例进行排序更好,还是任何排序都没有好处?编译器可能执行的优化可能取决于cases 的顺序。由于任何编译器可能会或可能不会选择此类优化,因此我不想在这里询问特定的语言或编译器。问题是关于可能发生的事情。
【问题讨论】:
-
这种语言是否适用于一组特定的编程语言?
-
我不会欺骗这个,但这是一个可能的欺骗:stackoverflow.com/questions/2815983/…
-
据我所知,您提到的所有语言都没有强制要求 switch 的性能行为——所以这实际上是一个关于实现的问题,而不是语言。如果你想限制你的问题,它应该是“gcc,clang,openjdk,MS CLR”之类的。
-
@gexicide,我认为这是一个不错的问题,但措辞方式使其过于宽泛。如果您关心优化开关的工作方式,也许您应该关心的是编译器,而不是语言。也许改写这个问题(或重新提问,看看你在这里得到的关闭/否决票的数量)以专注于这个问题 - 例如。 “案例的顺序是否会影响开关的可能编译器优化”。编译器使用了一些重要的技巧来优化开关,因此这可能是一个非常有趣但可能不太实用的问题。
-
我认为这是一个合理的问题,而且不是太宽泛,因为我认为从实际的角度来看,在大多数情况下都有一个正确的答案:将最常见的情况放在首位不会有任何伤害,并且可能会有所帮助,如果 switch 语句是性能接收器。不过,它看起来确实可能是 Mystical 发现的问题的欺骗。
标签: java c# c++ c switch-statement