C++Primer——第五章(语句)

5.1 简单语句

  • 表达式语句:一个表达式末尾加上分号,就变成了表达式语句。
  • 空语句:只有一个单独的分号。
  • 复合语句(块):用花括号{ } 包裹起来的语句和声明的序列。一个块就是一个作用域。

5.2 条件语句

if-else语句中,else匹配离它最近且尚未配对的if。

switch语句中,case标签必须是整型常量表达式。

注:如果需要为某个case分支 定义并初始化一个变量, 我们应该把变量定义在块内,从而确保后面的所有case标签 都在变量的作用域之外。

case true :
    {
        // 正确: 声明语句位于语句块内部
	    string file_name = get_file_name();
    }
    break;
case false:
    if(file_name.empty())   // 错误: file_name不在作用城之内

建议:

  • 尽管switch语句不是非得在最后一个标签后面写上break,但是为了安全起见,最好这么做。因为这样的话,即使以后再增加新的case分支,也不用再在前面补充break语句了。
  • 即使不准备在 default标签 下做任何工作,定义一个default标签也是有用的。其目的在于告诉程序的读者,我们已经考虑到了默认的情况,只是目前什么也没做。

5.3 迭代语句

  • while:当不确定到底要迭代多少次时,使用 while循环比较合适。(比如读取输入的内容)
  • for: for语句可以省略掉 init-statement, condition和 expression的任何一个;甚至全部。
  • 范围for: for (declaration: expression) statement

注:和其他的声明一样,init-statement 也可以定义多个对象。但是init-statement只能有一条声明语句,因此,所有变量的基础类型必须相同

5.4 跳转语句

  • break:break语句负责终止离它最近的while、do while、for或者switch语句,并从这些语句之后的第一条语句开始继续执行。
  • continue:终止最近的循环中的当前迭代 并立即开始下一次迭代。只能在while、do while、for循环的内部。
  • goto:goto语句无条件跳转到同一函数内的另一条语句。

goto语句的语法形式:goto label

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

注:标签标示符 独立于变量或其他标示符的名字。因此,标签标示符可以和程序中其他实体的标示符使用同一个名字而不会相互干扰。(goto语句和标签必须位于同一函数内)

建议:不要在程序中使用goto语句,因为它使得程序既难理解又难修改。

5.5 try语句块和异常处理

  • throw表达式:异常检测部分使用 throw表达式来表示它遇到了无法处理的问题。throw引发了异常。
  • try语句块:try语句块以关键字try开始,并以一个或多个catch子句结束。 try语句块中的代码抛出的异常通常会被某个 catch捕获并处理。 catch子句也被称为异常处理代码。
  • 异常类:用于在 throw表达式和相关的 catch子句之间传递异常的具体信息。

C++异常类定义在4个头文件中:

  1. exception头文件:定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息。
  2. stdexcept 头文件:定义了几种常用的异常类。
  3. new头文件:定义了bad_ alloc异常类型。
  4. type_ info头文件:定义了bad_ cast异常类型。

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

注:

  • 我们只能以 默认初始化 的方式初始化exception、bad_ alloc和bad_ cast 对象,不允许为这些对象提供初始值。
  • ​恰恰相反,其他异常类型应该使用 string对象或者C风格字符串 初始化这些类型的对象,但是不允许使用默认初始化的方式。当创建此类对象时,必须提供初始值,该初始值含有错误相关的信息。
  • 异常类型 只定义了一个名为what 的成员函数,该函数没有任何参数,返回值是一个指向C风格字符串的const char*。(提供关于异常的一些文本信息)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《C Primer》是一本针对C语言初学者的经典教材,第五版的第六章主要介绍了函数的基本概念和用法。 在第六章中,教材首先介绍了函数的定义和调用。函数是具有独立功能的代码块,可以通过函数名来调用。函数由函数头、参数、函数体和返回值组成。函数头包括函数类型、函数名和参数类型,参数用于接收传递给函数的值,返回值用于将结果返回给调用者。 接着,教材详细介绍了函数的参数传递方式,包括按值传递、按引用传递和按指针传递。按值传递是指将参数的值复制给形参,按引用传递是指将参数的引用传递给形参,而按指针传递是将参数的地址传递给形参。不同的传递方式在函数内部对参数进行操作时,会对应不同的结果。 此外,教材还讲解了函数的返回值和函数的调用顺序。函数的返回值类型由函数头中的类型确定,可以是任意类型。当函数需要返回多个值时,可以使用结构体或指针进行返回。函数的调用顺序决定了函数执行的顺序,即哪个函数先执行,哪个函数后执行。 在函数的实现过程中,教材介绍了函数的定义和声明、局部变量和全局变量、递归等内容。通过这些知识点的学习,读者可以了解到函数的具体细节和一些实践技巧。 总的来说,第五版的第六章通过清晰的语言和丰富的例子,循序渐进地讲解了函数的基本概念和用法。学完这一章,读者将能够理解函数的定义、调用、参数传递、返回值和实现等方面的知识,为之后的学习和实践打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值