c++:关键字异常处理机制

模板编程的几个关键字

  • 模(mu)板编程初体验
    (1)template和typename
    (2)模板实际上是一种抽象,C++的高级编程特性就是不断向抽象化发展

  • export
    (1)用来在cpp文件中定义一个模板类或模板函数,而它的声明在对应的h文件中
    (2)export专用于模板,类似于extern之于简单类型
    (3)实际很多环境不支持,暂不必细究,看到代码时能认出即可

  • requires
    (1)C++20引入,用于表示模板的参数约束
    (2)了解即可,暂时不用管

// 写一个函数add,完成2个数字的加和
// 假如有10种数据类型要考虑,那就要写10个add的重载函数,非常低效
int add(int a, int b)
{return (a + b);
}double add(double a, double b)
{return (a + b);
}
// 自定义一个抽象类型,譬如命名为X,编程的时候用X编程,X的具体类型在调用函数时
// 由实参的类型来确定
template <typename T> T add(T a, T b) { return (a + b); }int test(void) {char i = 45, j = 6;cout << "a + b = " << add(i, j) << endl;double a = 45.99, b = 6.88;cout << "a + b = " << add(a, b) << endl;return 0;
}

T可以是基本数据类型(如 int、float),也可以是用户自定义的类、结构体,甚至是其他模板类型。使用 T 可以让你的代码适应不同类型的输入,提高代码的灵活性。

C++的异常处理机制

  • 何为异常处理
    (1)异常exception,即运行时错误
    (2)C中没有异常机制,所以运行时遇到错误只能终止程序
    (3)C++中新增了异常处理机制,允许程序在运行时拦截错误并处理,这样程序就不用终止
    (4)异常机制的一个典型案例就是:由用户输入2个数字然后相除中的除0异常

  • 异常处理编程实践
    (1)try, catch, throw
    (2)异常处理机制为什么优于出错条件判断:https://www.cnblogs.com/wkfvawl/p/10816156.html

int test(void) {// 让用户输入2个数,然后程序返回他的相除cout << "please input 2 numbers" << endl;int m, n;cin >> m >> n;// C中我们这样处理if (n == 0) {cout << "0 not good" << endl;return -1;} else {cout << "m / n = " << m / n << endl;}cout << "---other code---" << endl;return 0;
}
int test(void) {// 让用户输入2个数,然后程序返回他的相除cout << "please input 2 numbers" << endl;int m, n;cin >> m >> n;// C++中用异常处理机制来处理try {// try括号里的代码就是有可能触发异常的代码if (n == 0) {// throw ('A');// throw (-8);throw(6.66);}cout << "m / n = " << m / n << endl;} catch (int e) // catch的()里写上要抓取的异常类型{cout << "catch int e" << endl;} catch (double e) // catch的()里写上要抓取的异常类型{cout << "catch double e" << endl;} catch (char e) // catch的()里写上要抓取的异常类型{cout << "catch char e" << endl;}cout << "---other code---" << endl;return 0;
}
  • 异常和函数
    (2)throw一个异常后如果没有catch会层层向外传递直到被catch为止
    (3)函数可以用throw列表来标识自己会抛出的异常

  • 标准库中的exception类
    (1)标准库中定义的异常类及其派生类,很多内置代码的错误会抛出这些异常
    (2)譬如bad_typeid,使用 typeid 运算符时,如果其操作数是一个多态类的指针,而该指针的值为 NULL,则会拋出此异常
    (3)譬如bad_cast,用 dynamic_cast 进行从多态基类对象(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会拋出此异常

  • noexcept关键字
    (1)throw(int, double, A, B, C)表示函数可能会抛出这5种类型的exception
    (2)throw() 表示函数不会抛出任何异常
    (3)C++11中引入noexcept关键字替代throw()表示函数不会抛出任何异常
    noexcept(bool)
    (4)没有throw列表的函数,表示函数可能会抛出任意类型的异常

剩余关键字和总结

剩余一些关键字
(1)线程相关:thread_local (C++11 起)
(2)import和module (C++20)
(3)协程相关:
co_await (C++20 起)
co_return (C++20 起)
co_yield (C++20 起)
(4)并发相关:synchronized (TM TS)
(5)反射相关:reflexpr (反射 TS)
(6)其他:
transaction_safe (TM TS)
transaction_safe_dynamic (TM TS)
atomic_cancel (TM TS)
atomic_commit (TM TS)
atomic_noexcept (TM TS)

  • 总结
    (1)C++关键字和复杂度远超过C语言,语言特性较多
    (2)面向对象编程相关特性是C++的基础核心,占比非常大
    (3)模板泛型和抽象化编程是C++的重要特征,甚至可以说是精髓所在
    (4)和java、python相比,C++的语法细节过多,这也是C++较难学习的重要原因
    (5)不要试图去记,以理解为主,配合代码实验去消化吸收,形成自己对C++的认知
    (6)经典C++与C++11、14、17、20的差异其实就是相应增加的关键字带来的新语言特性

总结

理解模板的概念,会使用template和typename
理解try, catch, throw使用方法

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/39063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘电子世界的双雄:模拟电路与数字电路的精彩对决!

数字电路与模拟电路&#xff0c;这两者在电子工程领域可谓是两大基石&#xff0c;各有千秋&#xff0c;各自发挥着不可或缺的作用。下面&#xff0c;我们就来详细探讨一下它们之间的主要区别。 1. 信号类型与处理 模拟电路&#xff1a;处理的是连续变化的信号&#xff0c;就像…

使用阿里云语音服务实现设备异常实时通知

随着物联网的普及,设备异常通知方式也变得多种多样。从传统的后台异常列表,到短信通知,再到微信消息通知等。然而,当设备探测到火警等紧急异常时,需要实时通知到相关人员。本文将介绍如何借助阿里云的语音服务来实现这一功能。 1. 准备工作 1.1 资质申请 首先,登录阿里…

Git中fetch与pull 的区别

一、fetch与pull的基本概念 在Git中&#xff0c;fetch和pull都是用于从远程仓库获取数据的命令。但是&#xff0c;它们在处理方式和结果上有所不同。 1、fetch fetch命令用于从远程仓库下载最新的数据到本地仓库&#xff0c;但它不会自动合并或修改当前的工作。fetch会将远程…

2024年大厂离职当博主成为最拥挤自媒体赛道的现象分析

大厂离职博主在2024年成为最拥挤自媒体赛道的现象分析 1. 行业背景与就业环境变化 降本增效引发的被动离职&#xff1a;近年来&#xff0c;随着各行业的降本增效措施不断推进&#xff0c;即便是知名大厂也在缩减员工规模。腾讯、阿里巴巴等企业的财报显示&#xff0c;从2021年…

一键恢复短信,4个方法,轻松找回iPhone数据!

在日常生活和工作中&#xff0c;短信往往承载着重要的信息和回忆。然而&#xff0c;意外删除、系统故障或手机更换等情况都可能导致短信丢失&#xff0c;这让很多iPhone用户感到困扰。 好消息是&#xff0c;您并不需要担心这些数据无法找回。如今&#xff0c;一键恢复短信的方…

autoware.universe源码略读(3.7)--perception:elevation_map_loader/euclidean_cluster

autoware.universe源码略读3.7--perception&#xff1a;elevation_map_loader/euclidean_cluster elevation_map_loadereuclidean_clustereuclidean_clustervoxel_grid_based_euclidean_cluster节点类launch文件 elevation_map_loader 在上一篇文章有提到compare_map_segmentat…

基于java+springboot+vue实现的家政服务平台(文末源码+Lw)299

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本家政服务平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

Redis中hash类型的操作命令(命令的语法、返回值、时间复杂度、注意事项、操作演示)

文章目录 字符串和哈希类型相比hset 命令hget 命令hexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloat 字符串和哈希类型相比 假设有以下一种场景&#xff1a;现在要在 Redis 中存储一个用户的基本信息(id1、namezhangsan、age17)&#xff0c;下图表示使用字符串…

2024护网整体工作预案示例

目录 第1章 HW整体工作工作部署 1.1 工作组织架构 1.2 各部门工作职责 1.3 演练期间工作机制 1.3.1 工作汇报机制 1.3.2 应急响应机制 第2章 系统资产梳理整改 2.1 敏感信息梳理整改 2.2 互联网资产发现 2.3 第三方供应商梳理 2.4 业务连接单位梳理 第3…

下载nginx搭建的文件服务器(爬虫)

下载nginx搭建的文件服务器&#xff08;爬虫&#xff09; windows版 需要下载python包&#xff1a;pip install requests import requests import re import os#开始访问的url地址&#xff0c;必须以/结尾 index_url "https://www.aaa.com/aaaaa/" #下载到本地的地…

win10显示毫秒-上午-下午及星期几,24小时制

关于毫秒 winr regedit 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 新建ShowSecondsInSystemClock&#xff0c;编辑1显示&#xff0c;不显示就删了它 然后重启 资源管理器可能有多个全部重启&#xff0c;就可以啦 根据自己喜好…

党建科普3D数字化展馆支持实时更新迭代

3D虚拟策展逐渐成为新时代下的主流方式&#xff0c;深圳华锐视点作为专业的web3d开发公司&#xff0c;具有专业化的3D数字化空间还原能力&#xff0c;能根据企业/个人不同需求和预算&#xff0c;为您打造纯线上虚拟3D艺术展&#xff0c;让您彻底摆脱实体美术馆的限制&#xff0…

面试官:Java文件是如何被加载到内存中的?

面试连环call Java文件是如何被加载到内存中的&#xff1f;Java类的声明周期都有哪些阶段&#xff1f;JVM加载的class文件都有哪些来源&#xff1f;JVM在加载class文件时&#xff0c;何时判断class文件的格式是否符合要求&#xff1f; 类生命周期 一个类从被加载到虚拟机内存…

【计算机体系结构】缓存的false sharing

在介绍缓存的false sharing之前&#xff0c;本文先介绍一下多核系统中缓存一致性是如何维护的。 目前主流的多核系统中的缓存一致性协议是MESI协议及其衍生协议。 MESI协议 MESI协议的4种状态 MESI协议有4种状态。MESI是4种状态的首字母缩写&#xff0c;缓存行的4种状态分别…

【Linux】—Xshell、Xftp安装

文章目录 前言一、下载Xshell、Xftp二、安装Xshell三、使用XShell连接Linux服务器四、修改windows的主机映射文件&#xff08;hosts文件&#xff09;五、远程连接hadoop102/hadoop103/hadoop104服务器六、安装Xftp 前言 XShell远程管理工具&#xff0c;可以在Windows界面下来访…

[数据集][目标检测]螺丝螺母检测数据集VOC+YOLO格式2400张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2400 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注…

SpringBoot 整合 Minio 实现文件切片极速上传技术

Centos7安装Minio 创建目标文件夹 mkdir minio使用docker查看目标镜像状况 大家需要注意&#xff0c;此处我们首先需要安装docker&#xff0c;对于相关安装教程&#xff0c;大家可以查看我之前的文章&#xff0c;按部就班就可以&#xff0c;此处不再赘述&#xff01;&#x…

uniapp入门

一、新建项目 进入到主界面&#xff0c;左上角点击新建——1.项目 输入项目名称&#xff0c;Vue版本选择3 二、创建页面 选中左侧文件目录里的pages文件夹&#xff0c;右键&#xff0c;选择新建页面 1输入名称 2选中“创建同名目录” 3选择模板&…

将json对象转为xml进行操作属性

将json对象转为xml进行操作属性 文章目录 将json对象转为xml进行操作属性前端发送json数据格式写入数据库格式-content字段存储&#xff08;varchar(2000)&#xff09;Question实体类-接口映射对象QuestionContent 接收参数对象DAO持久层Mapper层Service层Controller控制层接收…

《每天5分钟用Flask搭建一个管理系统》第13章:性能优化

第13章&#xff1a;性能优化 13.1 性能优化的重要性 性能优化确保应用能够处理高并发请求&#xff0c;减少响应时间&#xff0c;提高用户体验和应用的可扩展性。 13.2 Flask缓存机制 缓存是提高Web应用性能的关键技术之一&#xff0c;它可以减少数据库查询次数和服务器计算…