switch为什么比if else效率高?????

argenCHN 2007-02-07 10:13:57
switch不是也要依次比较case吗?
和if差不多啊,为什么效率要高呢?
...全文
17683 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzhaoyang121 2012-07-20
  • 打赏
  • 举报
回复
学习了
quanyecha198910 2012-06-21
  • 打赏
  • 举报
回复
学习学些
yzzhouyuefeng511 2012-02-10
  • 打赏
  • 举报
回复
很简单 写个测试程序不就得了
在每个switch 的case中和if else中都输出一句话
一开始记录开始时间
结束之后记录结束时间
宇宙379 2011-08-25
  • 打赏
  • 举报
回复
学习了。。。
snowy520 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 todototry 的回复:]

switch不是也要依次比较case吗?
和if差不多啊,为什么效率要高呢?
____________________________________
谁说的 托出去斩了
==================
switch是在无break的条件时,顺序执行各case,^_^
[/Quote]
是的
asight 2010-10-10
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 fangrk 的回复:]

当有大量的比较的时候,switch的效率应该高一点。

switch的case条件都是编译期整数常量,编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量

if/else是一个挨一个的查询,速度较慢,
优点是:不限比较类型和内容,你可以使用double,float,string或是自定义类型,比较双方不必是编译期常量。
[/Quote]
switch 怎么就是常量呢
T a
switch(a)
case n个
plaodj 2010-08-02
  • 打赏
  • 举报
回复
进来观摩 重点观摩文段较长的楼层
tnt_vampire 2010-06-10
  • 打赏
  • 举报
回复
小更正下
用if-else能够更加详细的表示比较过程和循序,但由于它的条件能够使用变量表达式,索引值很可能在运行期才能够确定下来,这样编译器就不能过早得作一些假设(更一般来说应该是条件索引的查找算法)进而优化,而switch-case则相反。
tnt_vampire 2010-06-10
  • 打赏
  • 举报
回复
用if-else能够更加详细的表示比较过程和循序,但由于它的条件能够使用变量表达式,索引值很可能在运行期才能够确定下来,这样编译器就不能过早得作一些假设(指索引值和跳转地址的哈希过程)进而优化,而switch-case则相反。
yangleit 2010-04-01
  • 打赏
  • 举报
回复
我来总结一下吧。
首先大家去看看一本书《C++ Footprint and Performance Optimization》,里面的7章,第一节。

然后根据大量的实际程序测试(不考虑不同的编译器优化程度差异,假设都是最好的优化),那么Switch语句击中第三个选项的时间跟if/else if语句击中第三个选项的时间相同。
击中第一,第二选项的速度if语句快,击中第四以及第四之后的选项的速度switch语句快。

所以,如果所有选项出现概率相同的话,结论就是:5个选项(包括default)的情况下,switch和if/else if相同。低于5个选项if快,高于5给选项switch快!
shaojuntao 2009-09-04
  • 打赏
  • 举报
回复
这么热闹啊
学习了啊
呵呵
原来没什么区别,对于我来说
呵呵
shuker 2009-03-11
  • 打赏
  • 举报
回复
学习了
zuoxiangshan 2009-02-18
  • 打赏
  • 举报
回复
switch 快
一叶孤舟哒 2008-03-12
  • 打赏
  • 举报
回复
if..else和switch的效率到底那个快个人觉得还是switch快点呵呵
jiangchyan 2007-03-09
  • 打赏
  • 举报
回复
不一样的,分情况,有时if else 快,有时switch快
mrdangdong 2007-03-09
  • 打赏
  • 举报
回复
FPGA设计的指导原则
http://www.mcu123.com/news/Article/fpga/FPGA/200607/50.html
Bennyatt 2007-02-09
  • 打赏
  • 举报
回复

不要老拿XXX的书来说话
要想真搞研究 光看书有什么用
要自己研究出一套 有依据的测试方法,再弄个测试程序。
然后自己测试一下,用实践来严正这东西。
这才是真正 想高明白问题 的方式。

要是光凭空想象分析吗。
我觉得 SWITCH可能会快一点点,但是从经验上看不会照IF ELSE结构快太多。
从理论上说 SWITCH 是不是 源于 IF ELSE 呢??
可能后来做了写优化???
这都只是猜测。
大家继续畅所欲言!
晨星 2007-02-09
  • 打赏
  • 举报
回复
主要原因就是对于switch,编译器生成的代码常常并不是一个一个的比较,而是更优化的方式,比如跳转表。而对于if/else,比较难说。
逸学堂 2007-02-09
  • 打赏
  • 举报
回复
mathe
所举的例子,正好是对于少量case下的编译器使用ifelse代替case的情况。
swtich是一般是使用转移表实现,如mathe的例子。
逸学堂 2007-02-09
  • 打赏
  • 举报
回复
今天终于找到这本书<C++高效编程:内存与性能优化>了,也算是给大家一个交待。

因为是纸版,无法把上面的测试数据拷贝下来(实在懒得写下来,找50m吧,她有精力)
测试结果,正如我上面的结论所属。
测试程序可以到www.samspublishing.com网站上找

当然对于不同的版本的编译器,可能最终的结果并不同于书上的测试结果,这也是书上提到的
因为标准中没有规定if else,switch case的效率,所以不要较真。

btw:<C++高效编程:内存与性能优化>第7章基本编程语句之7.1.4选择语句的性能比较
如果想多了解一些,请私下找我
加载更多回复(26)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧