本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这是本文档旧的修订版!
C++ Primer 笔记 第五章
我的笔记均包含大量个人理解内容,存在一定偏差。如果您发现错误,请留言提出,谢谢!
空语句用在逻辑上不需要,但是语法需要的地方。比如for循环的条件中就可以完成计算,但是仍然需要一个空语句作为结束。我们可以用一个“;”(semicolon)表示空语句。在大多数情况下,空语句是需要注释出来的;我们也需要注意不要多写semicolon,因为每一个分号都代表一个空语句。
如果我们需要在循环里用一大段代码来进行运算,我们就需要用curly braces“{}“把这些代码圈起来表示为一个整体。这些代码组成的整体叫复合语句(compound statements),也叫块(block)。对于块来说,块内定义的变量作用域就在块内。
块内定义的变量必须初始化,因为这些变量会被定义他们的控制结构所用到。
主要的条件语句有if-else / switch-case。具体应用哪种语句根据条件的数量来看。总的来说,条件越多,用switch-case的效率越高。
If-else的主要注意点是:if-else关键字总是寻找最近对应的if/else配对,所以要确保相邻的if/else是不是应该对应起来的的条件判断内容。
switch-case是通过case_label来进行条件判断的,所以在一个语句里,case的值不能有重复的。如果不是希望多组case共同表达一个分支,我们应该在每个case执行完毕后接上一个break,用于跳出语句。
switch-case中,在case作用域中定义并初始化变量是错误的,因为控制流很可能绕过这个定义语句,导致这个变量定义无效。所以如果需要在case作用域里定义变量,我们需要加上”{}“。这样保证了被定义的变量在作用域内,从而之后的case标签都在作用域外。
while / do while循环的条件可以由表达式或者已经初始化的变量声明来充当,比如:
int = 1;
if (i) {//using a declared variable as the condition。
statment;
}
while语句在条件一开始false的时候是不会执行的,do while 语句则会执行一遍。因此而对于do while来说,会先执行块再判断条件,所以在do while的条件里定义变量是非法的。
对于不确定循环的情况来说,用while是很好的。但如果我们希望指定循环多少次,那么我们可以用for。
传统的for由三部分组成,中间用分号分开:
for (init-statement ; condition ; expression)
statment;
跟while 一样,如果条件起始为false,那么语句就不会执行,而for中定义的初始值只在for循环里有效。对于这个init-statement, 我们是可以同时定义几个对象的。但这个初始化语句也跟一般的多变量初始化一样,我们需要保证定义的变量类型都相同。
for (declaration : expression)
statments;