C++//语句

1. 简单语句

;表示空语句。
事实上,常用的:
在这里插入图片描述
就是用上了空语句。上述例子也可以看出,多出的空语句也并非总是无害的。

复合语句是指用花括号括起来的语句和声明序列,又称为
空块为{},和空语句等价。

2. 条件语句

else与离他最近的尚未匹配的if相匹配。
switch表达式的计算结果和某个标签相同,程序就从该标签第一条语句开始,直到执行到switch的结尾或者遇到break语句。

可以多个标签执行同样的操作:在这里插入图片描述
在这里插入图片描述
在switch内的所有case在不加新的括号的情况下属于同一个作用域。这会导致在定义内部的变量时会出现问题。
在这里插入图片描述
C++规定,不能跨过初始化的语句转到另一位置(另一种说法是不能把控制从变量作用域外转移到作用域内,其实是一个意思)。这个较好理解,前面已经初始化了,程序员认为已经初始化了,就可能在下一位置直接使用,而如果允许跨过初始化语句转到另一位置,就会没有初始化而直接使用,造成错误。
而跨过未初始化的语句是可以的,程序员知道该语句未初始化,就能先初始化再使用,不会有问题。
C++规定:如果一个程序的执行路径从代码中的点A(某个局部变量x还未定义)跳到代码中另一点B(该局部变量x已定义,并且定义的时候有初始化),那么编译器会报错。故:

3. 迭代语句

3.1 while语句

在这里插入图片描述

3.2 for与范围for

for语句结构:
在这里插入图片描述
可以在init-statement定义多个对象,但是由于init-statement只能有一条声明语句,所以多个对象的类型必须相同。

范围for循环
在这里插入图片描述
expression表示的必须是一个序列。如:或括号括起来的初始值列表,数组,vector,string等等。
每次循环都会重新定义declaration,并初始化为序列的下一个值。所以一般declaration可以定义为引用,这样不用拷贝序列的元素。如果担心修改了序列的元素,可以声明为常量引用
事实上,范围for循环等价于:
在这里插入图片描述
这就是为什么不能在范围for循环内新增/删除元素,一旦改变了序列长度,迭代器就会失效。

3.3 do-while语句

在这里插入图片描述
不允许在while的条件部分定义变量。这样做是为了防止如下情况的发生:
在这里插入图片描述

4. 跳转语句

4.1 break

在这里插入图片描述

4.2 continue

在这里插入图片描述

4.3 goto

goto语句无条件的跳转到同函数的另一条语句。
在这里插入图片描述
goto语句不能从上至下跳过变量的初始化,但是可以从下至上跳过变量的初始化,这样做会销毁该变量并重新初始化。

5. try语句和异常处理

何为异常:
在这里插入图片描述
何为异常安全:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.1 throw表达式

在这里插入图片描述
例子:
在这里插入图片描述
runtime_error后跟的括号内的字符串是用于初始化runtime_error对象的。

5.2 try语句块

在这里插入图片描述
exception-declaration称为异常声明。
示例如下:
在这里插入图片描述
在这里插入图片描述
也就是说先要初始化runtime-error对象才能使用whattry需接住throw抛出的异常,然后进入catch完成异常处理。
在这里插入图片描述
比如:
在这里插入图片描述
在这里插入图片描述
比如在func1中抛出了异常,但是func1没有匹配的catch语句,就会取func中的catch中找。
在这里插入图片描述
对于没有try语句块定义的异常,直接terminate,这就是不做任何处理会发生的事情。
上述过程称为栈展开

执行完catch语句后,会跳转到本try所关联的最后一个catch子句之后的点,从这里开始执行。

catch语句括号内的内容称为异常声明
在这里插入图片描述

5.3 异常类

C++标准库定义了一组类,用于报告标准库函数遇到的问题。
主要分布在4个头文件中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于有字符串初始值的异常类型而言,what返回预先定义的字符串,对于无初始值的异常类型而言,what返回的内容由编译器决定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值