知方号

知方号

c++中异常处理中:logic<逻辑错误类型及举例说明怎么写>

c++中异常处理中:logic

摘自:http://www.dewen.net.cn/q/8659

C++语言本身或标准程序库所抛出的所有异常,都派生自基类exception。这是其他数个标准异常类别的基类,它们共同构成一个类体系:

这些标准异常类别分为三组:

(1)语言本身所支持的异常

此类异常用以支撑某些语言特性。主要包括: bad_alloc:new操作失败会抛出。 bad_cast:执行期间加在一个引用上面的动态性型别转换操作失败时抛出。 bad_typeid:执行RTTI时,交给typeid的参数为零或空指针时抛出 bad_exception:非预期的异常

(2)C++标准程序库发出的异常

总是派生自logic_error。逻辑错误是由于程序内部逻辑而导致的错误。逻辑错误是可以避免的,且在程序开始执行之前,能够被检测到。 C++标准库中定义的逻辑错误如下:

class logic_error : public exception {public: explicit logic_error (const string& what_arg);};class invalid_argument : public logic_error {public: explicit invalid_argument (const string& what_arg);};class out_of_range : public logic_error {public: explicit out_of_range (const string& what_arg);};class length_error : public logic_error {public: explicit length_error (const string& what_arg);};class domain_error : public logic_error {public: explicit domain_error (const string& what_arg);};

错误分类解释及举例:

domain_error:专业领域内的范畴 invalid_argument:无效参数,比如讲bitset以char而非0或1进行初始化 length_error:可能超越了最大极限,比如对着某个字符串附加太多字符。 out_of_range:参数不再预期范围内。例如在诸如array的容器或字符串string中采用一个错误索引。

(3)程序作用域之外发出的异常

总是派生自runtime_error,用来指出“不在程序范围内,且不容易回避”的事件。此类错误只在程序执行时才是可检测的。C++标准库中的定义如下:

class runtime_error : public exception {public: explicit runtime_error (const string& what_arg);};class range_error : public runtime_error {public: explicit range_error (const string& what_arg);};class overflow_error : public runtime_error {public: explicit overflow_error (const string& what_arg);};class underflow_error : public runtime_error {public: explicit underflow_error (const string& what_arg);};

range_error:内部计算时发生区间错误

overflow_error:算数运算时发生上溢

underflow_error:算数运算时发生下溢

Update: 实例代码:

#include #include #include #include #include #include using namespace std;//自定义配置器,vector分配空间使用templateclass stingyallocator : public allocator{public: template struct rebind { typedef stingyallocator other; }; size_t max_size( ) const { return 10; };};int main(){ //逻辑错误:out_of_range try { string str( "Micro" ); string rstr( "soft" ); str.append( rstr, 5, 3 ); cout

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了