【C++学习】——(七)语句
开篇
语句这个概念应该是学习编程语言最熟悉的了,还记得第一次写冒泡排序吗?那个循环和判断也难住了很多人;本篇不会具体介绍每一个语句的作用,而是讲述一些细节以及关于C++对于语句的特性;
基础
1、语句常见类型
- 表达式语句:表达式后面加分号,对表达式求值后丢弃,会产生副作用(也就是赋值等操作);
- 空语句:仅包含一个分号的语句,可能与循环一起工作;
- 复合语句:由大括号组成,无需在结尾加分号,形成独立的域(语句域);
2、顺序语句
- 从语义上按照先后顺序执行;
- 实际的执行顺序可能产生变化(编译器优化、硬件乱序)
- 与硬件流水线紧密结合,执行效率高;
3、非顺序语句(加入分支)
-
在执行过程中引入跳转,从而产生复杂变化;
-
分支预测错误可能导致执行性能下降;(分支预测是用来优化非顺序语句执行效率)
-
最基本的非顺序语句goto:通过标签指定跳转到的位置,本质上对应了汇编语言中的跳转指令,但容易造成逻辑混乱,应避免使用;
一些语句的细节
1、在switch语句中,如果没有用break跳出当前的switch就会执行下面的case;这样的一个情况在C++17中引入了一个属性**[fallthrough]**,感兴趣的可以了解下;
2、switch与if的优劣:
- switch的分支能力较弱,switch能实现的if都能实现,反过来则不能;
- switch在一些情况下能引入更好的优化;
3、关于for循环的使用案例,可以参考:https://zh.cppreference.com/w/cpp/language/for
4、基于范围的for循环
本质:语法糖,编译器会转换为for循环的调用方式;
注意:在C++11、17、20中不断演化改进;
参考文档:https://zh.cppreference.com/w/cpp/language/range-for
5、break和continue
break:导致外围的for、范围for、while、do-while循环或switch终止;
continue:用于跳过整个for、while或do-while循环体的剩余部分;
总结
本篇对于语句的基础并没有过多的讲解,不管是C++、JAVA还是Python,在循环部分都是相似的,只有语言特性上的不同;而对于循环逻辑,在实际工程中是最重要的,往往一个边界判断错误就会导致越界或者报错的情况,这也需要大家不断实践,推荐刷一些Leetcode真题,可看我总结的Leetcode刷题专栏;
对于想深入了解C++的工程师来说,强烈推荐多看cppreference,基本涵盖了每个知识点的原型以及使用案例,可以抽时间静下心看看;
下一篇将介绍函数,内容会比较多,在此做个预告;