2014-03-30 52 views
0

关于使用例外和try {} catch {}块的想法是,那些用于错误处理。 我读Bjarne's Strostrup FAQ page部分有关异常和我碰上了这个C++中的例外与其他语言中的例外

但也有例外的其他用途 - 流行的其他语言 - 但 不地道的C++和故意不通过C++ 实现很好地支持(这些实现基于 假设异常用于错误处理进行了优化)。

其他语言的其他用法(例如C#或java)的其他用法是什么?

+1

您的问题太宽泛,不能真正负责。所以(尽管我不同意当前的规则,并且关于SO的一些最受赞誉的问题都属于这种类型),但我已经投票决定关闭它。作为一个例子,一个用法是在获得最终结果时突破深度递归。 –

+1

相关:http://stackoverflow.com/questions/7480146/difference-between-exception-handling-in-c-and-java –

+0

即使异常更常用于其他语言,并且不仅适用于“特殊”情况,它几乎总是用于错误处理,就像在C++中一样。 –

回答

2

在Python中,本着“请求宽恕,不允许”的精神,异常经常作为应用程序正常控制流程的一部分使用。例如,在字典中查找元素时(认为用C std::unordered_map ++):

try: 
    my_value = my_dict["the answer to life, the universe and everything"] 
except KeyError: 
    my_value = 42 

在C++中,这不被认为是“错误”的情况;异常只能用于与硬件设备和(在某种程度上)操作系统等“不可预知”的事物进行交互。

+1

也在Python for for循环的内部工作中。 –

+1

请记住,糟糕的用户输入通常被认为是无意识的。 – Deduplicator

+0

好点,删除。 – Thomas

0

另一个用途是java中的InterrutedException。它允许在监视器或睡眠线程中等待waitsleep

+0

中断繁忙的线程被认为是邪恶的,并且有很多陷阱。 – Deduplicator

+0

@Deduplicator你可能会认为,如果'Thread.stop'是一个有各种问题的硬止损,而且以前不推荐使用。 'Thread.interrupt'优雅地要求线程终止,这就是为什么它需要退出等待et.al.处理中断请求。 – Drunix