一、在c++模块内部用异常而不是用返回值来报告错误;
二、不要让c++异常穿越模块边界(标准的动态库,传统的导出c函数的那种);
三、异常作为precondition的check比assert优秀,所以不要使用assert检查不变式(检测逻辑错误);
四、返回值是很有用的传值通道,如非必要(比如说跨越模块边界)还是用异常来抛出错误(返回非逻辑错误);
五、逻辑错误是可以避免和调试改正的,由于疏忽大意或者不看接口规范而抛出的异常时我们修改bug的贤内助,所以请不要捕获这种异常(除非你故意与函数作者作对这另当别论);
六、除去前置条件外,函数抛出异常时是由于它无法完成它声明的契约功能,所以当你不清怎么处理这个异常的时候请不要捕获它。坚决鄙视捕获所有异常的行为。
七、当某件事情会平凡发生的时候,即使它代表与这个函数名相反含义,它不代表异常;它应该成为函数契约的一部分,因为我们能够预料发生失败的情况是多么的频繁。
呵呵在pongba新闻组中讨论了半天
“c++ exception” 口水说了不少,总结下;贴出来做个标记欢迎不同意见。