C++ Primer 第四版读书笔记(五)之语句

通常情况下,语句是顺序执行的。但是,除了最简单的程序外,只有顺序执行往往并不足够。为此,C++定义了一组控制流语句,允许有条件地执行或者重复地执行某部分功能。

1.1 简单语句

C++中,大多数语句以分号结束。

表达式语句用于计算表达式。

1.2 声明语句

在C++中,对象或类的定义或声明也是语句。

1.3 复合语句

复合语句,通常被称为块,使用一对花括号括起来的语句序列。块标识了一个作用域,在块中引入的名字只能在该块内部或者嵌套在块中的子块里访问。通常,一个名字只从其定义处到该块结尾这段范围内可见。

复合语句用在语法规则要求使用单个语句但程序逻辑却需要不止一个语句的地方。

1.5 语句作用域

在条件表达式中定义的变量必须初始化,该条件检验的就是初始化对象的值。

对于在控制语句中定义的变量,限制其作用域的一个好处是,这些变量名可以重复使用而不必担心它们的当前值在每一次使用时是否正确。对于作用域外的变量,是不可能用到其在作用域内的残留值的。

1.6 if 语句

if语句根据特定表达式是否为真来有条件的执行另一个语句。

1.7 switch 语句

深层嵌套的if-else语句往往在语法上是正确的,但逻辑上却没有正确地反映程序员的意图。

1.7.1 switch 中的控制流

存在一个普遍的误解:以为程序只会执行匹配的case标号相关联的语句。实际上,程序从该点开始执行,并跨越case边界继续执行其他语句,直到switch结束或者遇到break语句为止。

1.7.2 switch表达式与case标号

case标号必须是整型常量表达式。

如果两个case标号具有相同的值,同样也会导致编译时错误。

1.7.3 switch 内部的变量定义

对于switch结构,只能在它的最后一个case标号或default标号后面定义变量。

制定这个规则是为了避免出现代码跳过变量的定义和初始化的情况。

在这种情况下,如果需要为某个特殊的case定义变量,则可以引入块语句,在该块语句中定义变量,从而保证这个变量在使用前被定义和初始化。

1.8 while 语句

当条件为真时,while语句反复执行目标语句。

1.9 for循环语句

一般来说,用于对每次循环过程中都要修改的变量进行初始化,或者赋给一个起始值。

for循环的使用

假如有下面的for循环,用于输出vector对象的内容:

for(vector<string>::size_type ind =0; ind != svec.size(); ++ind)

{

cout << svec[ind];

if(ind + 1 != svec.size())

cout << " ";

}

它的计算顺序如下:

(1)循环开始时,执行一次init-statement(初始化语句)。在这个例子中,定义了ind,并将它初始化为0;

(2)接着,求解condition(循环条件)。如果ind不等于svec.size(),则执行for循环体,否则循环结束。如果第一次循环时,条件就为false,则不执行for循环体。

(3)如果条件为true,则执行for循环体。

(4)最后,求解exprission。

1.8.1 省略for语句头的某些部分

for与语句中,可以省略init-statement(初始化语句)、condition(循环条件)或者expression(表达式)中的任何一个(或全部)。

1.8.2 for语句头中的多个定义

可以在for语句的init-statement中定义多个对象;但不管怎样,该处只能出现一个语句,因此所有的对象必须具有相同的一般类型。

1.8.3 try块和异常处理

异常机制提供程序中错误检测与错误处理部分之间的通信。C++的异常处理中的包括:

1、throw 表达式,错误检测部分使用这种表达式来说明遇到了不可处理的错误。可以说,throw引发了异常条件。

2、try,错误处理部分使用它来处理异常。try语句块以try关键字开始,并以一个或多个catch子句结束。在try块中执行的代码所抛出的异常,通常会被其中一个catch子句处理。由于它们“处理”异常,catch子句也称为处理代码。

3、由标准库定义的一组异常类,用来在throw和相应的catch之间传递有关的错误信息。

1.8.3.1 throw表达式

系统通过throw表达式抛出异常。throw表达式由关键字throw以及尾随的表达式组成,通常以分号结束,这样它就成了表达式语句。throw表达式的类型决定了所抛出异常的类型。

1.8.3.2 try块

try块的通用语法形式是:

try

{

program-statements

}catch(exception-specifier)

{

handler-statments

}

catch(exception-specifier)

{

handler-statments

}

try块以关键字try开始,后面是用花括号括起来的语句序列块。try块后面是一个或多个catch子句。每个catch子句包括三个部分:关键字catch,圆括号内单个类型或者单个对象的声明——称为异常说明符,以及通常用花括号括起来的语句块。如果选择了一个catch子句来处理异常,则执行相关的块语句。一旦catch子句执行结束,程序流程立即继续执行紧随着最后一个catch子句的语句。

时间: 2024-10-22 18:58:14

C++ Primer 第四版读书笔记(五)之语句的相关文章

C++ Primer 第四版读书笔记(七)之标准IO库

C++的输入/输出由标准库提供.标准库定义了一组类型,支持对文件和控制窗口等设备的读写(IO).还定义了其他一些类型,使string对象能够像文件一样操作,从而使我们无需IO就能实现数据与字符之间的转换.一般来说,类的设计者还可以很方便地使用IO标准库设施读写自定义类的对象.类类型通常使用IO标准库为内置类型定义的操作符和规则来进行读写. 一.面向对象的标准库 迄今为止,我们已经使用IO类型和对象读写数据流,它们常用于与用户控制窗口的交互.当然,实际的程序不能仅限于对控制窗口的IO,通常还需要读

C++ Primer 第四版读书笔记(四)之表达式

表达式由一个或多个操作数通过操作符组合而成.最简单的表达式仅包含一个字面值常量或变量.较复杂的表达式则由操作符以及一个或多个操作数构成. 每个表达式都会产生一个结果.如果表达式中没有操作符,则其结果就是操作数本身的值.当一个对象用在需要使用其值的地方,则计算该对象的值. 操作符的含义--该操作符执行什么操作以及操作结果的类型--取决于操作数的类型. C++提供了一元操作符和二元操作符两种操作符.作用在一个操作数上的操作符称为一元操作符.如曲地址符(&)和解引用操作符(*):而二元操作符则作用于两

C++ Primer 第四版读书笔记(八)之顺序容器

容器容纳特定类型对象的集合. 标准库vector类型,是一个顺序容器.它将单一类型元素聚集起来称为容器,然后根据位置来存储和访问这些元素,这就是顺序容器.顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定. 标准库定义了三种顺序容器类型:vector.list和deque.它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价.标准库还提供了三种容器适配器.实际上,适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型. 顺序容器类型 顺

C++ Primer 第四版读书笔记(六)之函数

内联函数.类成员函数和重载函数以及函数指针. 函数可以看作程序员定义的操作.与内置操作符相同的是,每个函数都会实现一系列的计算,然后(大多数时候)生成一个结算结果.但与操作符不同的是,函数有自己的函数名,而且操作数没有数量限制.与操作符一样,函数可以重载,这意味着同样的函数名可以对应对个不同的函数. 一.函数的定义 函数由函数名以及一组操作数类型唯一地表示.函数的操作数,也即形参(parameter),在一对圆括号中声明,形参与形参之间以逗号分隔.函数执行的计算在一个称为函数体(function

C++ Primer 第四版读书笔记(三)之数组与指针

C++语言提供了两种类似于vector和迭代器类型的低级复合类型--数组与指针.与vector类型相似,数组也可以保存某种类型的一组对象:而它们的区别在于,数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以像迭代器一样用于遍历和检查数组中的元素. 现代C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针.设计良好的程序只有在强调速度时才在类实现的内部使用数组和指针. 数组是C++语言中类似于标准库vector类型的内置数据结构.与vector类似,数组也是一种

C++ Primer 第四版读书笔记(八)之顺序容器(续)

3.6 访问元素 如果容器非空,那么容器类型的front和back成员将返回容器内第一个或最后一个元素的引用. 访问顺序容器内元素的操作 c.back() 返回容器c的最后一个元素的引用.如果c为空,则该操作未定义 c.front() 返回容器c的第一个元素的引用.如果c为空,则该操作未定义 c[n] 返回下标为n的元素的引用 如果n<0或n>c.size(),则该操作未定义 只适用于vector和deque容器 c.at[n] 返回下标为n的元素的引用.如果下标越界,则该操作未定义 只适用于

C++ Primer 第四版读书笔记(一)之变量和基本类型

C++语言定义了几种基本类型:字符型.整形.浮点型等. 1.基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型,另外还定义了一种称为void的特殊类型. 表1.1 C++:算术类型 类型 含义 最小存储空间 bool 布尔型 - char 字符型 8位 wchar_t 宽字符型 16位 short 短整型 16位 int 整形 16位 long 长整形 32位 float 单精度浮点型 6位有效数字 double 双精度浮点型 10位有效数字 long double 扩展

C++ Primer 第四版读书笔记(二)之标准库类型

C++定义了一个内容丰富的抽象数据类型标准库,其中最重要的标准库类型是string和vector,它们分别定义了大小可变的字符串和集合.string和vector往往将迭代器用作配套类型,用于访问string中的字符,或者vector中的元素. 另一种标准库类型为bitset,提供了一种抽象方法来操作位的集合. string类型支持长度可变的字符串,vector用于保存一组指定类型的对象. bitset类标准库类型提供了更方便和合理有效的语言级的抽象设施.通过这个类可以把某个值当作位的集合来处理

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla