第5章 语句

本文最后更新于:2023年8月25日 凌晨

第5章 语句

1. 简单语句

表达式语句

表达式加上分号就是一条语句

1
2
ival + 5;		//一条没有实际作用的表达式语句
cout << ival; //一条有用的表达式语句

空语句

一个分号 ; 就是空语句

1
2
3
4
;	//空语句
ival = v1 + v2;; //第二分号是空语句,没有影响
while (iter != svec.end()) ; //分号是空语句,导致下面的语句不会出现在循环中执行
++iter; //不属于循环体的一部分

空语句单独不会有什么作用,但是和其他语句组合会有不同的作用。

注意:别漏写分号,也别多写分号

复合语句

复合语句也就, 就是用一对 {} 括起来的多个语句

1
2
3
4
while (val < 10) {
sum += val;
++val;
}

块不以分号作为结束,但是在声明定义类时{} 后要加 ;

2. 条件语句

2.1 if 语句

if 语句的语法形式:

1
2
3
4
5
6
7
if (condition)
statement
//if else 语句
if (condition)
statement
else
statement2

使用注意:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//1. 注意使用花括号
if (grade < 60)
lettergrade = scores[0];
else //错误: 下面的语句应该全部属于else的部分,需要加花括号
lettergrade = scorses[(grade - 50)/10];
if(grade != 100)
if(grade % 10 > 7)
lettergrade += '+';
else if(grade % 10 < 3)
lettergrade += '-';

//2.悬垂else,else与最近的尚未匹配的if匹配
if (grade % 10 > = 3)
if(grade % 10 > 7)
lettergrade += '+';
else // 实际匹配内层的if
lettergrade += '-';
  • 尽量每个if-else中的语句块加上花括号{}
  • if-else的匹配原则是就近原则,空格和缩进在c++是不会作用的,不像某些语言(点名 python)

2.2 switch 语句

格式:

1
2
3
4
5
6
7
8
9
10
11
12
switch(lables) {
case lable1:
statement;
break;
case lable2:
statement;
break;
...
default:
statement;
break;
}

注意:

  • lable1, lable2,... 必须是整型常量表达式
  • 如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支,除非程序显示地中断了这一过程。
  • 如果不是特殊的需求,每个case都需要加 break, 否则会一直执行下面的标签
  • default 标签建议写上
  • 在不同两个标签定义的变量,不要跨标签使用(如果需要为某个分支定义并初始化一个变量,应该把变量定义在块内,即使用{} )

3. 迭代语句

whilefor语句在执行循环体之前检查条件,do while语句先执行循环体,然后再检查条件。

3.1 while语句

1
2
while (condition)
statement

3.2 do-while 语句

1
2
3
do
statement
while (condition); // 不要忘记 ;

3.3 传统的for语句

1
2
for (init-statement; condition; expression)
statement

init_statement可以定义多个对象,但只能有一条声明语句,因此所有变量的类型必须相同。

3.4 范围for语句

1
2
for (declaration : expression)
statement

expression表示的必须是一个序列,比如用花括号括起来的初始值列表、数组或者 vector 或 string 等类型的对象,这些类型的共同特点是拥有能返回迭代器的 begin 和 end 成员。

4. 跳转语句

4.1 break 语句

break 负责终止离它最近的 while、do while、for、或switch语句

4.2 continue 语句

结束当前迭代,并进入下次迭代

4.3 goto语句

从 goto 语句无条件跳转到同一函数内的另一条语句。

1
goto label;

label是用于标识一条语句的标示符。

1
end: return;  // 带标示符的语句

goto语句很好用,但是不建议用,会导致代码结构较乱

5. try语句块和异常处理

5.1 throw表达式

throw用于抛出异常

1
2
if(item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");

5.2 try 语句块

语法形式

1
2
3
4
5
6
7
try{
program-satements;
} catch (exception-declaration) {
handler-statements;
} catch (exception-declaration) {
handler-statements;
}// ...

program-satements 是我们用运行的语句

catch (exception-declaration) 表示的是可能会出现的异常以及相对应的异常处理语句

5.3 标准异常

c++标准库定义了一组类,用于报告标准库函数遇到的问题,它们分别定义在4个头文件中

  • exception 头文件定义了最通用的异常类 ,它只报告异常的发生,不提供任何额外信息
  • stdexcept 头文件定义几种常用的异常类,详细见下表
  • new 头文件定义了 bad_alloc异常类型
  • type_info 头文件定义了bad_cast异常类型


第5章 语句
https://kingw413.github.io/2023/08/24/Ch5-语句/
作者
Whd
发布于
2023年8月24日
许可协议