当前位置: 首页 > news >正文

【C++】5.6 try语句和异常处理

1.异常和异常处理介绍

异常是指存在于运行时的反常行为,这些行为超出了函数正常的范围。

异常处理机制通过程序中的异常检测和异常处理两部分协同支持,主要包括:

异常检测:

throw表达式,throw表达式包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出异常类型。

异常处理:

try语句块 + catch子句

通用形式是:

try
{
    可能引发异常的代码;
    if(异常发生的条件)
    {
        throw error;
    }
}
catch(error)
{
    处理异常语句;
}
catch(error2)
{
    处理error2异常语句;
}
...

其中不管是throw抛出的error类型、或者是catch后紧接着的error都是有具体类型的。

举个例子:

#include <iostream>
using namespace std;

int main()
{
	try
	{
		int x = 1;
		int y;
		cin >> y;
		if (0 == y) 
		{
			throw runtime_error("The denominator is equal to 0");
		}
		double z = x / y;
		cout << "z = " << z << endl;
		
	}
	catch (runtime_error err) 
	{
		cout << err.what() << endl;
	}
	return 0;
}

在以上例子中,在try语句中,当输入分母y=0时,就会抛出一个Runtime_error的异常,类似break,就不会执行后续程序 “打印z=”,然后会被catch补货到同类型的异常,并且给出相应提示。

当输入y=2时:

当输入y=0,出现分母为0的异常时:

2.异常类

在stdexcept头文件中,定义了几种常用的异常类:

异常类说明备注
exception最常见的问题不给初始值
runtime_error只有运行时才能检测出的问题string或者C风格字符串初始化
range_error运行时错误:生成的结果超出了有意义值的范围string或者C风格字符串初始化
overflow_error运行时错误:计算上溢string或者C风格字符串初始化
underflow_error运行时错误:计算下溢string或者C风格字符串初始化
logic_error程序逻辑错误string或者C风格字符串初始化
domain_error逻辑错误:参数对应的结果值不存在string或者C风格字符串初始化
invalid_argument逻辑错误:无效参数string或者C风格字符串初始化
length_error逻辑错误:试图创建一个超出该类型最大长度的对象string或者C风格字符串初始化
out_of_error逻辑错误:使用一个值超出有效范围string或者C风格字符串初始化
bad_alloc不给初始值
bad_cast不给初始值

异常类只定义了一个名为what的成员函数,该函数没有任何参数,返回值是一个指向C风格字符串的const char *。主要目的是提供关于异常的一些文本信息。

关于以上异常类的相关详细理解,笔者暂时没有深入研究,后续找机会补齐相关内容。

相关文章:

  • C# 命名空间(Namespace)详解
  • 稀疏注意力:打破Transformer计算瓶颈,实现高效长序列建模
  • ES02 - ES语句
  • TMS320F28P550SJ9学习笔记7:结构体寄存器方式配置SCI通信收发_SCI通信收发测试
  • C/C++ 实现由用户通过键盘输入自然数并判断其是不是素数(带清空缓冲区等考虑)
  • 【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型
  • 全星FMEA软件:汽车电子行业研发管理高效之选
  • VPS加装前置代理全解析
  • uni_app实现下拉刷新
  • K8S学习之基础十七:k8s的蓝绿部署
  • AUTOSAR ETH模块(3)——接口功能分析
  • 利用EasyCVR平台打造化工园区视频+AI智能化监控管理系统
  • 解密 Atlassian Cloud:创新驱动的项目管理之道
  • STM32之I2C通信概览
  • 什么是 spring 的循环依赖?
  • 深入解析EfficientNet:高效深度学习网络与ResNet的对比(使用TensorFlow进行代码复现,并使用cifar10数据集进行实战)
  • UniApp 运行的微信小程序如何进行深度优化
  • 服务器虚拟化:技术原理、实践与未来趋势
  • 测试用大模型组词
  • 文件传输协议(File Transfer Protocol, FTP)
  • 口碑营销的前提及好处有哪些/做seo需要用到什么软件
  • 网站建设需求文档模版/宁波seo关键词费用
  • 优秀的网站举例/国际新闻头条
  • 微信分享网站短链接怎么做/最新引流推广方法
  • 是网站建设专业好/关注公众号一单一结兼职
  • 珠宝怎么做网站/营销型网站的类型有哪些