throw 主要是用来抛出异常.

throw

可以直接向主程序 throw 一个东西,可以是各种数据类型,显示在界面上就是抛出的数据类型.

int main(){
throw 1;
}
terminate called after throwing an instance of 'int'

--------------------------------
Process exited after 0.5906 seconds with return value 3

或者是自己定义的数据类型:

class hdk{};
int main(){
throw hdk{};
}
terminate called after throwing an instance of 'hdk'

--------------------------------
Process exited after 0.5983 seconds with return value 3

可以看出返回值都是 \(3\). 因为抛出错误意味着程序非正常结束了.

try{throw}catch

因为这样抛出来不是很直观,因此 c++ 有一个专门的语句 try-throw

class hdk{};
int main(){
try{
if(true) throw hdk{};
}
catch(hdk){
cout<<"Error"<<endl;
exit(114514);
}
}

我们把 throw 语句放进 try 里面,这样的话,throw 的东西不是直接输出到运行界面,而是扔到 catch 执行.

这个 catch 并不是逻辑判断,而是类型判断,只要 try 里扔出来的东西和它对上了就执行.

所以还有多行 catch 判断,直观点可以写成这样:

class DevidedByZero{};
class AnswerIsZero{};
int main(){
while(1){
int a,b;
cin>>a>>b;
try{
if(b==0) throw DevidedByZero{};
else if(a/b==0) throw AnswerIsZero{};
else cout<<a/b<<endl;
}
catch(DevidedByZero){
cout<<"Error: DevidedByZero"<<endl;
}
catch(AnswerIsZero){
cout<<"Error: AnswerIsZero"<<endl;
}
}
}
4 2
2
5 0
Error: DevidedByZero
0 5
Error: AnswerIsZero

或者使用 c++ 提供的标准错误流输出:

cerr<<"Error: DevidedByZero"<<endl;

效果是一样的

[OI] throw的更多相关文章

  1. Hive学习之自己定义聚合函数

    Hive支持用户自己定义聚合函数(UDAF),这样的类型的函数提供了更加强大的数据处理功能. Hive支持两种类型的UDAF:简单型和通用型.正如名称所暗示的,简单型UDAF的实现很easy,但因为使 ...

  2. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  3. C++异常处理: try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  4. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  5. 再见,OI

    你好,NOIP 2015年9月1日 正式成为了福建省莆田一中的一名高一成员 后来学校搞了选修 大家都很激动 因为自己的兴趣和特长能够得到发挥了(或者说能逃课或者看好多电影) 发现选修提供的选项中有好几 ...

  6. java中的throw与throws的区别

    什么时运行时异常?什么是非运行时异常? 通俗的讲: 运行时异常:就是编译通过,运行时就崩了,比如数组越界. 非运行时异常:就是编译不通过,这时就得必须去处理了.不然就没法运行了. 全面的讲: Thro ...

  7. js 利用throw 写的一个小程序

    在下边的小程序中比较特殊的是使用isNaN()函数判断一个参数是不是数字, <!DOCTYPE html> <!DOCTYPE html> <html> <h ...

  8. Java 中 手动抛出异常: throw new Exception("错误信息") 错误信息的获得

    当然需要先用try catch捕获,但注意new Exception("")括号里的字符串其实是异常原因,所以获取是要用ex.getCause().getMessage() int ...

  9. 告别我的OI生涯

    本文章写于2008年12月15日. 随着2008noip的结束,我也结束了我的OI生涯. 信息竞赛也许是从小到大让我最最努力的一件事.我记得参加2006noip初赛前,每天中午为了上信息课都吃不上中午 ...

  10. throw exception

    Throw new CustomerException('Customer message'); // App\Exceptions\Handler.php public function rende ...

随机推荐

  1. 错误记录java: JDK isn't specified for module

    跑苍穹外卖的时候遇到了 java: JDK isn't specified for module 'sky-pojo'这一问题 解决办法是通过修改JDK版本,这个项目用的springboot比较早,可 ...

  2. 使用ventoy安装windows10

    使用ventoy安装windows10 在ventoy中选择windows10镜像 进入Windows安装界面 下一步,选择现在安装 稍等片刻 选择我没有产品密钥 根据需求选择对应版本 下一步,接受许 ...

  3. 使用 useState 管理响应式状态

    title: 使用 useState 管理响应式状态 date: 2024/8/1 updated: 2024/8/1 author: cmdragon excerpt: 摘要:本文详细介绍了在Nux ...

  4. PixiJS源码分析系列:第四章 响应 Pointer 交互事件(上篇)

    响应 Pointer 交互事件(上篇) 上一章我们分析了 sprite 在 canvasRenderer 上的渲染,那么接下来得看看交互上最重要的事件系统了 最简单的 demo 还是用一个最简单的 d ...

  5. 图书《数据资产管理核心技术与应用》核心章节节选-3.1.2. 从Spark 执行计划中获取数据血缘

    本文节选自清华大学出版社出版的图书<数据资产管理核心技术与应用>,作者为张永清等著. 从Spark 执行计划中获取数据血缘 因为数据处理任务会涉及到数据的转换和处理,所以从数据任务中解析血 ...

  6. 暑假自学Java进度总结04

    一.今日所学: 1.下载并使用idea开发工具 1>了解idea的发展历史 2>尝试用idea编写代码 3>学习idea中的项目和模块操作 2.学习赋值运算符 加后赋值:" ...

  7. mybatis-plus之逻辑删除&自动填充&乐观锁

    1.背景 mybatis-plus除了常规的一些CRUD还有其他的的功能如下 2.逻辑删除 2.1.实现配置 步骤一.数据库准备一个逻辑删除字段,一般是deleted 步骤二.配置文件中添加入下配置 ...

  8. .NET电子邮件高效处理解决方案

    前言 在日常软件开发中,电子邮件处理是一个不可或缺的功能,无论是用户注册验证.通知推送还是日常的业务沟通,都离不开电子邮件的支持.今天大姚给大家分享2款.NET开源.高效.强大的.NET电子邮件处理库 ...

  9. git的快速入门(含常用指令)

    目录 概念 什么是git git与GitHub有什么区别 提交.仓库.分支 git的使用 从GitHub上下载别人的代码 直接将代码下载到本地 克隆仓库获取代码 将自己的代码上传到GitHub 本文拟 ...

  10. 一次生产环境mysql迁移操作(一)数据归档

    一次生产环境mysql迁移操作(一)数据归档 一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理) 背景 在项目过程中我们经常要对数据库进行迁移.归档.拆分等等操作,现在描述下几种方案 ...