有人可以向我解释一下吗?
它们非常相似,但每个都有一些特殊功能.
开关
switch
通常比很多嵌套更紧凑if else
,因此更具可读性
如果省略break
两个切换案例之间的区域,则可以使用许多类C语言进入下一个案例.有了if else
你需要一个goto
(这是不是很高兴你的读者...如果语言支持goto
的话).
在大多数语言中,switch
只接受基本类型作为键和常量作为大小写.这意味着编译器可以使用非常快的跳转表对其进行优化.
目前尚不清楚如何switch
正确格式化.从语义上讲,这些案例是跳跃目标(如标签goto
),应该是向左齐平的.当你有大括号时情况变得更糟:
case XXX: { } break;
或者大括号是否应该成为他们自己的行?闭合支撑应该落后break
吗?这有多难以理解?等等
在许多语言中,switch
只接受一些数据类型.
如果别的
if
允许复数表达式在条件中,而switch想要一个常量
你不能不小心忘记它们break
之间,if
但你可以忘记else
(特别是在cut'n'paste期间)
它接受所有数据类型.