EE_DSnP 板


LINE

大家好 我又来骗文章数和P币了(笑) 这次主要想讨论关於C++的例外处理 但是因为我跟C++的例外很不熟 (计程应该没上过吧?) 反而Java的稍微熟一点 不完整的部分请大神们补完 ================================================================================ 在C++中 有些函数会丢出(throw)例外 像string的substr成员函数 就有可能会丢出out_of_range型别的例外物件 new之类的好像也会丢bad_alloc的样子 当某个函数throw例外时 那个函数就会中止运作 而呼叫函数端则会收到这个例外 如果呼叫端没有写任何处理用的程式码 那就会把这个例外从该点再往外丢 直到这个例外被处理为止 ┌──────────────────────┐ │ int main(int argc, char** argv) │ │ { │ │ ... │ │ func_ex(); //可能丢出例外的函数 │ │ ... //如果 func_ex 丢出了例外 │ │ //则这个区块的程序不执行 │ │ } │ └──────────────────────┘ 上面这个阳春的例子 是说main呼叫了一个可能丢出例外的函数 虽然我们没有做任何处理 但是C++有预设的处理方式 这个例外就在被丢出main的时候被系统自动handle ================================================================================ 前文不断提到"处理例外" C++中对例外的处理是透过 try...catch 的方式 (Java也是) 直接看例子好了 ┌──────────────────────────┐ │void func() { │ │ throw bad_alloc(); │ │} │ │ │ │int main() │ │{ │ │ ... │ │ try { │ │ func(); │ │ } │ │ catch(bad_alloc ex) { │ │ cerr << "file open failed\n"; │ │ } │ │ ... //will be executed after exception handling │ │} │ └──────────────────────────┘ 对於可能产生例外的程序段 我们用try包起来 底下紧接着catch撰写对不同型别例外的处理 func里则示范了手动丢出例外的语法: throw [variable]; 这里的variable其实只要是变数就可以了 随便丢都没差 Note: 1. 一个try後面可以跟很多个catch 但是每个catch处理的例外型别 不能一样 2. try里面包含的程序不一定全都会产生例外 (还满废话的) 3. 如果想捕捉任何型别的例外 可以写catch(...) 小括弧里面就真的是三个小数点无误 4. 所以 如果处理了某些型别的例外後 想在最後加上default的例外处理 可以写成 try{......} catch(type1 t){......} catch(type2 t){......} catch(...){......} 5. catch里面也可以throw 6. 如果catch里没有中断程序的叙述 像是assert return continue break throw之类的 其後的叙述会被执行 第二个例子有标注 ================================================================================ 感觉Java的还比这严格....听说连int这种东西都可以throw的时候我真的傻了 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.248.13.54
1F:推 Phantasnix:对原po的研究精神拜服不已! 11/10 21:33
2F:→ ypf791:啊对 如果try里面没有丢任何例外的话 catch不会执行喔>.^ 11/10 21:48
3F:推 OckhamsRazor:9p币...怎麽可能... 11/10 22:06
4F:推 LDPC5566:应该是先打好再贴 9p币实在太少了阿~ 11/11 12:35
5F:→ ypf791:感谢楼上指教 原来还有这种差异 11/11 14:58







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP