C/C++零散知识点汇总之switch实现原理&switch和if-else对比

简介: C/C++零散知识点汇总之switch实现原理&switch和if-else对比

C/C++零散知识点汇总之switch实现原理&switch和if-else对比


switch...case一般写法:

switch (表达式) {
    case data1 : 语句1 break;
    case data2 : 语句1 break;
    case data3 : 语句1 break;
    case data4 : 语句1 break;
    ...
    default : 语句n break;
}

if...else一般写法:

if (boolean) {
    代码块
} else if (boolean) {
    代码块
} else if (boolean) {
    代码块
} else {
    代码块
}

switch...case实现原理

通俗的说,先把内存中switch里面的case值按照顺序生成一个表,当没有那个值时,它对应的就是default。

具体来讲,switch...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case常量,若大于,则调到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址 + 表项大小 * 索引号),程序接着跳到此地址执行,到此完成了分支的跳转。

由此看来,switch是通过以空间换时间的思想实现。

if...else实现原理

if...else是通过遍历查找的方式来进行分支跳转。执行效率很低。

switch...case和if...else对比

1、分支较多时,当使用switch的效率是很高的,因为switch是随机访问的,就是当确定了选择值之后直接跳转到特定的分支,但是if...else是遍历所有的可能值,直到找到符合条件的分支。由此看来switch的效率确实比if...else要高得多。

2、相对来说switch占用的代码空间更多,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch...case的空间使用率较低。

3、switch...case只能处理case为常量的情况,对于非常量的情况是无能为力的。例如if (a > 1 && a < 100),是无法使用switch...case来处理的,所以switch...case只能在常量选择分支时比if...else高效,但是if...else能用于更多的场合,if...else相对更灵活。

4、switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化。

5、switch只将表达式计算一次,然后将表达式的值与每个case的值进行比较,进而选择执行哪个分支的语句块。

6、if-else的判断条件范围更广,每天语句基本上是独立的,每次判断时都要加载条件一次,所以在多路分支时使用switch比if...else结构要更高效。

7、if...else语句每一句都是独立的,if条件中的左值要被读入寄存器多次,右值分别被读入寄存器一次。当虚拟机读到switch的时候所有的判断数据都加载到了内存中,而if是边判断边加载。

相关文章
|
6月前
|
存储 人工智能 算法
【一站式备考指南】一文掌握 C++ 程序设计 课程 知识点
【一站式备考指南】一文掌握 C++ 程序设计 课程 知识点
128 0
|
5月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
591 13
|
5月前
|
C++
C/C++内存管理(2):`new`和`delete`的实现原理
C/C++内存管理(2):`new`和`delete`的实现原理
|
6月前
|
C++ 存储
C++从零基础到入门(2)—— (if、switch、for、while语句)
C++从零基础到入门(2)—— (if、switch、for、while语句)
C++从零基础到入门(2)—— (if、switch、for、while语句)
|
5月前
|
C++
C++继承的相关知识点
C++继承的相关知识点
29 0
|
6月前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
6月前
|
监控 API 数据安全/隐私保护
屏幕监控软件开发指南:C++实现原理解析
在当今数字化时代,屏幕监控软件成为了企业管理和个人隐私保护的重要工具。本文将深入探讨如何使用C++语言实现屏幕监控软件,并解析其实现原理。我们将通过多个代码示例来说明其工作方式,最后将介绍如何将监控到的数据自动提交到网站。
193 3
|
6月前
|
C++
【C++小小知识点】重载、覆盖(重写)、隐藏(重定义)的对比【详解】(23)
【C++小小知识点】重载、覆盖(重写)、隐藏(重定义)的对比【详解】(23)
|
6月前
|
存储 算法 搜索推荐
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点(二)
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点
155 2
|
6月前
|
存储 算法 C++
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点(一)
【C++ 数据结构与算法 一站式备考指南】一文掌握 数据结构与算法课程 知识点
249 2