语句
空语句
用一个***;作为一个语句***,用来占位。
多出的空语句并不会有语法上的错误,但可能会产生逻辑上的错误。如在循环后加一个***;***。
当花括号内不存在语句时被称为空块,与空语句作用一致。
作用域
条件语句也有作用域。
条件
当不使用花括号时,else会和最近的if相匹配,而非根据缩进。
if的条件括号中定义的变量只在if和else中时有效的。
switch
用法:
1 |
|
case后的值是变量的可能值,但必须为整型常量,小整数类型(包括字符)也是整型。
当case都不符合时,会执行default。
当一个case内部运行结束时,并不会结束switch,而是接着运行下面一个case,因此需要在每一个case的最后加一个break。
此外,由于会跳过语句,因此虽然整体属于一个switch的作用域内,但是不允许在case内声明初始化语句。
但是,可以通过在case内部加入一组大括号来制造一个作用域。
因此,作用域是由大括号来决定的。
for
定义语句虽然可以多重定义,但由于是一句语句,因此声明时变量必须是同种类型的。
传统for的三要素都是可以省略的。
for-range语句的对象必须是一个能够通过***.begin()与.end()返回头和尾后指针的类型***。其等价于:
因为***.end()是一开始就获取好的,因此不能在循环中向其中添加元素***,使其***.end()***改变。
break
终止while, do while, for, switch。
continue
结束while, do while, for的当前一次迭代。
goto
在程序中以lable:来声明标签位置,接着可通过goto label来跳转。
不能向后跳过初始化语句,但可以向前跳过,在此过程中,会销毁这一初始化的变量。
异常处理
步骤:
- 在可能出现错误的地方使用try包裹。
- 在出现错误的地方用throw抛出异常。
- 在try后用catch捕捉错误类型并处理解决。
格式:
1 |
|
错误信息是string类型或者C风格字符串。
try内部声明的局部变量并不能在catch作用域中被使用。
可以通过***.what()来获取初始化错误时使用的字符串字面值,返回值是const char ****。
catch只会通过错误类型进行匹配。
当并没有匹配到对应的catch时,会返回调用当前函数的函数继续寻找,若到底层仍然没找到,则直接terminate,程序非正常退出。
异常类型
- exception头文件,异常类型exception,最常见的问题,不提供任何其他信息。
- stdexcept头文件,提供多种异常类型。
- new头文件,异常类型bad_alloc。
- type_info头文件,异常类型bad_cast。
只有stdexcept提供非默认初始化。
鲁棒性,指系统在扰动或不确定的情况下仍能保持它们的特征行为。