《c++ primer》第五章 语句

news/2025/1/25 12:15:29/

前言

建议看书的时候就看一下异常,其它的直接跳过

一、简单语句

​ 一条表达式语句以;结尾,它的作用是执行表达式并丢弃掉求值结果。一行如果只有一个;也是一条语句,称为空语句。复合语句时用{}括起来的语句或者声明, 也称为块,第二章在作用域有提到一个块就是一个独立的作用域。如果一个{}里面什么也没有,称为空块。

条件语句注意事项

  1. if else尽量把{}带上,免得出bug不好找
  2. switch case中,不能在某个case块中定义变量,因为如果该变量在后续的case中有使用,就会发生编译错误。
  3. do whilewhile的区别在于前者先执行循环体再检测条件,后者反之。所以do while不管怎样都会进行一次循环。

二、异常

C++中的异常处理有三种:1)throw表达式:引发异常;2)try catchtry中抛出的异常会被catch中的代码进行处理;3)异常类:用于在throwcatch之间传递异常的具体信息。

throw表达式

​ 举一个经典的除数不为0 的例子,当输入的除数为0时,通过throw引发异常。这里引发的异常并没有被处理

int a, b;cin >> a >> b;if (b != 0) {cout << "a / b = " << a / b << endl;} else {throw runtime_error("除数不能为0!!!");}

try catch

try后面可以跟多个catch块,以处理多个不同类型的异常。结合上面throw引发的异常,通过catch进行处理。

try {if (b != 0) {cout << "a / b = " << a / b << endl;	} else {throw runtime_error("除数不能为0!!!");}} catch (runtime_error e) {cout << e.what() << endl; // 处理异常}

image-20230124143910501

​ 当一个异常被抛出时,寻找处理异常代码的过程与函数调用链相反。首先会去引出异常的函数寻找处理代码,如果没有,再去调用函数的函数寻找代码被且终止最初引发异常的函数,如果当前的函数也没有,就去找下一个调用当前的函数的函数中是否有异常处理代码,一直循环,直到没有找到任何处理函数,那么程序最终会转到名为terminate的标准款函数。执行了该函的程序都是非正常退出。如果一开始就没有定义try catch,那么当抛出异常时就会直接转到terminate函数。

标准异常

C++定义了一组异常库,熟悉并使用这些内置的异常信息可以让程序更加的完善。以下是定义异常类的4个头文件

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

  • stdexcept定义了常用的几种异常。如下。

    image-20230124150439063

  • new头文件定义了bad_alloc,后面章节会介绍

  • type_info定义了bad_cast异常类型

头文件定义了bad_alloc,后面章节会介绍

  • type_info定义了bad_cast异常类型

    ​ 在上面的这些异常类中,我们只能以默认初始化的方式初始化exception、bad_alloc和bad_cast对象,不能给这些对象赋予初始值。


http://www.ppmy.cn/news/19234.html

相关文章

分享139个ASP源码,总有一款适合您

ASP源码 分享139个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 139个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Vk4U4EXVCWZWPMWf9ax2dw?pwdif23 提取码&#x…

Knowledge-based-BERT(一)

多种预训练任务解决NLP处理SMILES的多种弊端&#xff0c;代码&#xff1a;Knowledge-based-BERT&#xff0c;原文&#xff1a;Knowledge-based BERT: a method to extract molecular features like computational chemists&#xff0c;代码解析从K_BERT_pretrain开始。模型框架…

NEZUKO: 1——202201152003

NEZUKO: 1——202201152003 About Release Back to the Top Name: nezuko: 1Date release: 21 Aug 2019Author: yunaranyancatSeries: nezuko Download Back to the Top Please remember that VulnHub is a free community resource so we are unable to check the machin…

基于STM32的FreeRTOS开发(1)----FreeRTOS简介

为什么使用freertos FreeRTOS 是一个免费和开源的实时操作系统&#xff0c;它主要用于嵌入式系统。它非常轻量级&#xff0c;可以在很小的硬件资源上运行&#xff0c;因此非常适合在限制硬件资源的嵌入式系统中使用。 FreeRTOS提供了一组简单的任务管理功能&#xff0c;可以让…

MODBUS总线的学习笔记

MODBUS学习记录 下面所有资料均copy于安富莱电子和博客中&#xff0c;仅作为个人学习笔记记录&#xff0c;写的不好请见谅。 1.modbus简介介绍 Modbus 是由 Modicon&#xff08;现为施耐德电气公司的一个品牌&#xff09;在 1979 年发明的&#xff0c;是全球第一个真正 用于…

数据结构 最短路径课设(源码+实验报告+视频讲解)(用了自取)

XIAN TECHNOLOGICAL UNIVERSITY 课程设计报告 实验课程名称 算法与数据结构 专 业&#xff1a; 班 级&#xff1a; 姓 名&#xff1a; 学 号&#xff1a; 实验学时&#xff1a; 指导…

什么是软件架构中的ASRs(架构需求文档)?

作者&#xff1a;非妃是公主 专栏&#xff1a;《软件工程》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 专栏地址 软件工程专栏地址 专栏系列文章 软件工程复习01&#xff1a;软件工程概述 软件工程复习02&#xf…

【蓝桥杯】简单数论2——快速幂矩阵快速幂

1、快速幂 1.1运算模 定义&#xff1a;模运算为a除以m的余数&#xff0c;记为a mod m&#xff0c;有a mod m a % m。 模运算是大数运算中的常用操作&#xff1a;如果一个数太大&#xff0c;无法直接输出&#xff0c;或者不需要直接输出&#xff0c;可以把它取模后&#xff0…