【C++学习记录】—— 【13】【语句】

一.简单语句

1.表达式语句

对一个表达式的末尾加上一个分号,就变成了表达式语句

2.空语句

而空语句则只含有一个分号:

while(1)
{
    ;
}

3.复合语句(块)

复合语句是用花括号括起来的,复合语句也被称作不以分号结束,而空块等价于空语句

二.语句作用域

可以在ifswitchwhilefor等语句的控制结构内定义变量,而这些变量只能在相应的语句内部看见,一旦语句结束,变量就超过其作用范围了。后面会详细介绍

三.条件语句

1.if语句

这个很常用,就不过多介绍,不过if的else有个特性,就是else会与离它最近的尚未匹配的if进行匹配

就像这样:

if (a > 10)
	if (a > 50)
        cout << "a > 50";
else
    cout << "a < 10";

实际上,当a输如在10~50的时候会输出a < 10,而并不想我们想的对齐那样。这一点和python有巨大我的差距!!!

当然,要实现这种功能,我们可以添加花括号:

if (a > 10)
{
	if (a > 50)
        cout << "a > 50";
}
else
    cout << "a < 10";

2.switch语句

对于switch语句的基本形式如下:

switch(表达式)
{
    case1: 表达式; break;
    case2: 表达式; break;
    ......
    case 值n: 表达式; break;
    default:  表达式; break;
}

其中,breakdefault可以不要。

如果值等于表达式的结果,那么就会一直从这个值所在的地方开始,一直运行到switch的尾部或者遇到break跳出switch

default标签里可以放一个空语句,即使你什么也不准备做,但这样写会是逻辑更清晰

四.迭代语句

1.while语句

while语句的结构如下所示:

while(condition)
    statement

对于条件部分,我们一定要写个可以设法改变的值,否则这就是一个死循环。

而且:定义在条件或者语句内的变量,在每一次迭代的时候,都会经历从创建到销毁的过程

2.for语句

基本结构

for (init-statemaen; condition; expression)
    statement

其中这四个部分,你可以省略一个到多个,甚至全部。而init-statement里,只能有一条语句申明,所以如果要申明多个变量的话,需要所有的基础类型相同。

3.范围for语句

这个前面了解过,可以遍历容器或者其他序列里的所有元素:

for (declaration : expression)
    statement

4. do while语句

do-while语句和普通的while差不多,只是说它是先执行一次循环体,再进行判断,且最后的条件语句后面要加;

do
	statement
while (condition);

五.跳转语句

1.break

break是终止离它最近的循环或者switch

2.continue语句

continue语句是终止最近的循环中的当前迭代,并开始下一次的迭代,该语句只能出现在for while do-while循环语句的内部,作用范围也是最近的一个循环。

3.goto语句

goto的语法是:

goto lable;

goto的目标是标签,标签的表示方法是lable: statement

比如,我们来写一个永远输出2的死循环:

end: int x = 1;
cout << ++x;
goto end;

六.try语句块和异常处理

没有代码会是“完美”的,多多少少在各种情况下可能会出现bug,这个时候就需要我们使用异常处理,来处理这些奇怪的异常。在C++中异常处理包括以下:

  1. throw表达式:检测部分使用它,如果在它的范围内遇到了无法处理的问题,就说throw引发了异常。
  2. try语块:try语块从关键字try开始,并以一个或多个catch结束。因为catch“处理”异常,所以他们也被称作异常处理代码
  3. 一套异常类,用在throwcatch里传递异常的信息

1.throw表达式

比如:

if (check() == false)
    throw runtime_error("error");

其中runtime_error是标准库类型的一种,我们必须用一个字符串去初始化它,一般用于存放一些异常的辅助信息。

2.try语句块

语法形式:

try{
    program-statements
}catch (exception-declaration){
    handler-statements
}catch (exception-declaration){
    handler-statements
}
//.......

也就是说,如果program-statements出现了问题,抛出了异常,并且在catch中有对该异常的声明,那么就会跳转到该catchhaldler-statements里,如果没有抛出异常,则会到最后一个catch子句后面的那条语句继续执行(也就是try的花括号后面)。

注意:try语块里面申明的标量在它的外部是没法访问的,包括catch

如果抛出异常后,没有在它里面找到catch语句,就会返回调用这个含有try的函数的函数里去寻找try,就一层一层往上找,如果到了最后都没有找到,那么就会转到一个叫做terminate的标准库函数里。

3.标准异常

①exception定义的异常类

定义了最通用的异常类exception,它只报告异常的发生,不提供任何额外信息。

异常名称说明
exception最常见的问题
bad_exception这是个特殊的异常,如果函数的异常列表里声明了 bad_exception 异常,当函数内部抛出了异常列表中没有的异常时,如果调用的 unexpected() 函数中抛出了异常,不论什么类型,都会被替换为 bad_exception 类型。

②stdexcept定义的异常类

定义了几种常用的异常类。

异常名称说明
runtime_error只有在运行时才能检测出的问题
range_error运行时出错:生成的结果超出了有意义的值域范围
overflow_error运行时出错:计算上溢
underflow_error运行时出错:计算下溢
logic_error程序逻辑错误
damain_error逻辑错误:参数对应的结果值不存在
invalid_argument逻辑错误:无效参数
length_error逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range逻辑错误:使用一个超出有效范围的值

③new定义的异常类

异常名称说明
bad_alloc使用 new 或 new[ ] 分配内存失败时抛出的异常。

④type_info定义的异常类

异常名称说明
bad_typeid使用 typeid 操作一个 NULL 指针,而且该指针是带有虚函数的类,这时抛出 bad_typeid 异常。
bad_cast使用 dynamic_cast 转换失败时抛出的异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值