跟我学C++中级篇——if条件语句与switch比较

一、背景介绍

在前面的一些分析介绍以及网上的资料或者书籍中,都有说过如果条件分支语句较多时,推荐使用switch而不要使用if语句,因为前者的速度比后者要快,特别是数量多时,会比较明显。但其实这句话是有问题的。在经常写类似条件语句的开发者眼中看来,可能很少考虑二者到底有什么不同,心中有一个大概的印象就可以了。真正开发时,很少有这种较真的场景。
答案确实也是如此。但正因为这样,大多数的开发者往往忽略这个问题或者觉得它不值一哂。但学习的过程不能放过每一个细节,可以不对其重视,但不能不知道其所以然。

二、if和switch的处理

一般来说,传统的认知中可能是下面的想法:
1、if会对条件进行反复不断的比较来最终确定跳转的分支语句
2、switch则会是查一个表来进行跳转,所以它的效率会高
但事实一定是这样么?
整体上来言,上面的下意识的想法不能说错误,只能说不完全正确。但是实际上编译器的处理还是有一定的复杂性的:
1、编译器优化的情况下,二者没有差别的。所以,在前面反复提到过不要小看编译器的进步
2、即使是在没有开优化的前提下,如果值的内容有所不同,也有可能产生一些意想不到的情况。比如值比较分散,则编译器对switch使用二分查找方式,如果比较连续,则使用无冲突的散列表来进行处理。
3、在非常少的比较时,二者几乎也没有什么差距,比如只有两个分支
看一下这个例子:

#include <iostream>

using namespace std;
void testIf(int d) {
   
  if (d == 1) {
   
    std::cout << "call 1 !" << std::endl;
  } else if (d == 2) {
   
    std::cout << "call 2 !" << std::endl;
  } else if (d == 3) {
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值