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. 个人使用 sudo 方法

    sudo 作用:允许 系统管理员 授予某些用户或用户组以 其他用户身份 运行某些或所有命令的权限 su 用于变更为其他使用者的身份的命令,一般需要键入该使用者的密码 sudo 则是对 su 使用的简化 ...

  2. vue小知识~eventBus

    eventBus是指在向全区暴露这个vue对象,此时在任意一个地方都可以使用vue相关的实例 在main.js配置 Vue.prototype.$bus=new Vue() 此时整个应用都可以使用vu ...

  3. windows中新建文件菜单消失的解决办法

    具体解决办法: https://jingyan.baidu.com/article/cbcede07577f4702f40b4dfd.html 右键中新建文本文件 菜单消失: 注册表编辑器: 路径: ...

  4. Java--匿名类(学习笔记)

    匿名类的特点:(1) 匿名类是final类:(3) 在匿名类中可以定义实例变量和若干个实例初始化代码块和新的实例方法.Java虚拟机首先调用父类的构造方法,然后按照实例变量的和实例初始化代码块定义的先 ...

  5. [python] 启发式算法库scikit-opt使用指北

    scikit-opt是一个封装了多种启发式算法的Python代码库,可以用于解决优化问题.scikit-opt官方仓库见:scikit-opt,scikit-opt官网文档见:scikit-opt-d ...

  6. 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?

    我的博客园:https://www.cnblogs.com/CQman/ 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 需求信息: 用户本地AD用户通过ADConnect同步到O365,用户想 ...

  7. Aspire8一文通

    Aspire8一文通 0.简介 微软Aspire是微软今年推出的一个全新的平台无关.语言无关的新框架,它的设计目的是简化云原生应用的开发.部署和管理过程.Aspire的读音是[əˈspaɪər],它的 ...

  8. mysql读写分离之springboot集成

    springboot.mysql实现读写分离 1.首先在springcloud config中配置读写数据库 mysql: datasource: readSize: 1 #读库个数 type: co ...

  9. reduce() 多种用法

    reduce()方法用于将数组简化为单一值,通过遍历数组并应用提供的函数.它可以用于求和.乘积.计算对象属性的总和.数组去重和转换数组结构等.初始值的设置会影响reduce的起始索引.不提供初始值时, ...

  10. Vim:从光标位置开始全局搜索和替换

    /\v SEARCHTERM :%s/\vBEFORE/AFTER/gc