关于使用例外和try {} catch {}
块的想法是,那些用于错误处理。 我读Bjarne's Strostrup FAQ page部分有关异常和我碰上了这个C++中的例外与其他语言中的例外
但也有例外的其他用途 - 流行的其他语言 - 但 不地道的C++和故意不通过C++ 实现很好地支持(这些实现基于 假设异常用于错误处理进行了优化)。
其他语言的其他用法(例如C#或java)的其他用法是什么?
关于使用例外和try {} catch {}
块的想法是,那些用于错误处理。 我读Bjarne's Strostrup FAQ page部分有关异常和我碰上了这个C++中的例外与其他语言中的例外
但也有例外的其他用途 - 流行的其他语言 - 但 不地道的C++和故意不通过C++ 实现很好地支持(这些实现基于 假设异常用于错误处理进行了优化)。
其他语言的其他用法(例如C#或java)的其他用法是什么?
在Python中,本着“请求宽恕,不允许”的精神,异常经常作为应用程序正常控制流程的一部分使用。例如,在字典中查找元素时(认为用C std::unordered_map
++):
try:
my_value = my_dict["the answer to life, the universe and everything"]
except KeyError:
my_value = 42
在C++中,这不被认为是“错误”的情况;异常只能用于与硬件设备和(在某种程度上)操作系统等“不可预知”的事物进行交互。
另一个用途是java中的InterrutedException
。它允许在监视器或睡眠线程中等待wait
或sleep
。
中断繁忙的线程被认为是邪恶的,并且有很多陷阱。 – Deduplicator
@Deduplicator你可能会认为,如果'Thread.stop'是一个有各种问题的硬止损,而且以前不推荐使用。 'Thread.interrupt'优雅地要求线程终止,这就是为什么它需要退出等待et.al.处理中断请求。 – Drunix
您的问题太宽泛,不能真正负责。所以(尽管我不同意当前的规则,并且关于SO的一些最受赞誉的问题都属于这种类型),但我已经投票决定关闭它。作为一个例子,一个用法是在获得最终结果时突破深度递归。 –
相关:http://stackoverflow.com/questions/7480146/difference-between-exception-handling-in-c-and-java –
即使异常更常用于其他语言,并且不仅适用于“特殊”情况,它几乎总是用于错误处理,就像在C++中一样。 –